UGISS Community

Il sito della community dello User Group Italiano di SQL Server
Welcome to UGISS Community Sign in | Join | Help
in Search

Alessandro Alpi's blog

Parliamo di integration services e non solo..

aprile 2008 - Posts

  • [SSMS] La gestione dei template

    SQL Server Management Studio ci offre la possibilità di utilizzare dei template predefiniti per la creazione e la modifica di oggetti. La lista dei template, accessibile dal Template Explorer, è veramente ampia. Eccone un'anteprima:



    Come possiamo vedere vi sono molti modelli disponibili. Si possono modificare, se ne possono creare di nuovi. Vi è un'ampia libertà di movimento. In aggiunta abbiamo anche una lista dei template recentemente utilizzati dalla quale pescare i nostri preferiti.
    Ma oltre alla lista, esiste la possibilità di scriverli "al volo" per utilizzarli subito, ad esempio, all'interno di uno script SQL. Prendendo spunto da uno dei tanti template disponibili sul Template explorer, notiamo il formato dei placeholder:

    <nome_parametro, tipo_dati, valore>

    nome_parametro
    rappresenta il nome del parametro nello script.
    tipo_dati
    è il tipo di dati del parametro.
    valore è il valore che sostituirà ogni occorrenza del parametro nello script.

    Facciamo un semplice esempio. Ipotizziamo di dover creare uno script atto alla creazione di un database.
    Vogliamo che il database sia formato da tre file (un mdf, un ldf ed un ndf) i cui nomi sono composti dal nome del database seguito da un suffisso, e da due FILEGROUP, PRIMARY e SECONDARY. Ecco un possible script, che va bene per ogni database:

    CREATE DATABASE <NomeDB, stringa, > ON  PRIMARY
    ( NAME = N'<NomeDB, stringa, >_data', FILENAME = N'C:\Databases\<NomeDB, stringa, >_data.mdf' , SIZE = 3072KB , FILEGROWTH = 1024KB ),
     FILEGROUP [SECONDARY]

    ( NAME = N'<NomeDB, stringa, >_user', FILENAME = N'C:\Databases\<NomeDB, stringa, >_user.ndf' , SIZE = 3072KB , FILEGROWTH = 1024KB )
     LOG ON

    ( NAME = N'<NomeDB, stringa, >_log', FILENAME = N'C:\Databases\<NomeDB, stringa, >_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%)
    GO

    EXEC dbo.sp_dbcmptlevel @dbname=N'<NomeDB, stringa, >', @new_cmptlevel=90
    GO

    IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
    begin
    EXEC
    <NomeDB, stringa, >.[dbo].[sp_fulltext_database] @action = 'disable'
    end
    GO
    ALTER DATABASE <NomeDB, stringa, > SET ANSI_NULL_DEFAULT OFF
    GO

    ALTER DATABASE <NomeDB, stringa, > SET ANSI_NULLS OFF
    GO

    ALTER DATABASE <NomeDB, stringa, > SET ANSI_PADDING OFF
    GO

    ALTER DATABASE <NomeDB, stringa, > SET ANSI_WARNINGS OFF
    GO

    ALTER DATABASE <NomeDB, stringa, > SET ARITHABORT OFF
    GO

    ALTER DATABASE <NomeDB, stringa, > SET AUTO_CLOSE OFF
    GO

    ALTER DATABASE <NomeDB, stringa, > SET AUTO_CREATE_STATISTICS ON
    GO

    ALTER DATABASE <NomeDB, stringa, > SET AUTO_SHRINK OFF
    GO

    ALTER DATABASE <NomeDB, stringa, > SET AUTO_UPDATE_STATISTICS ON
    GO

    ALTER DATABASE <NomeDB, stringa, > SET CURSOR_CLOSE_ON_COMMIT OFF
    GO

    ALTER DATABASE <NomeDB, stringa, > SET CURSOR_DEFAULT  GLOBAL
    GO

    ALTER DATABASE <NomeDB, stringa, > SET CONCAT_NULL_YIELDS_NULL OFF
    GO

    ALTER DATABASE <NomeDB, stringa, > SET NUMERIC_ROUNDABORT OFF
    GO

    ALTER DATABASE <NomeDB, stringa, > SET QUOTED_IDENTIFIER OFF
    GO

    ALTER DATABASE <NomeDB, stringa, > SET RECURSIVE_TRIGGERS OFF
    GO

    ALTER DATABASE <NomeDB, stringa, > SET AUTO_UPDATE_STATISTICS_ASYNC OFF
    GO

    ALTER DATABASE <NomeDB, stringa, > SET DATE_CORRELATION_OPTIMIZATION OFF
    GO

    ALTER DATABASE <NomeDB, stringa, > SET PARAMETERIZATION SIMPLE
    GO

    ALTER DATABASE <NomeDB, stringa, > SET  READ_WRITE
    GO

    ALTER DATABASE <NomeDB, stringa, > SET RECOVERY FULL
    GO

    ALTER DATABASE <NomeDB, stringa, > SET  MULTI_USER
    GO

    ALTER DATABASE <NomeDB, stringa, > SET PAGE_VERIFY CHECKSUM
    GO

    USE <NomeDB, stringa, >
    GO

    IF NOT EXISTS (SELECT name FROM sys.filegroups WHERE is_default=1 AND name = N'SECONDARY') ALTER DATABASE <NomeDB, stringa, > MODIFY FILEGROUP [SECONDARY] DEFAULT
    GO

    Si puo notare che al posto di ogni nome database esiste un placeholder così formato:

    <NomeDB, stringa, >

    Come possiamo usarlo? Come lo sostituiamo? Innanzitutto fate attenzione ai percorsi e se non avete le cartelle, createle a priori, altrimenti avrete un errore.

    1) Copiate lo script su management studio in una nuova query.
    2) Premete CTRL+MIUSC+M (ho la versione in inglese di SSMS, quindi non garantisco sullo shortcut) oppure aprite il menu Query --> Specify Values for Template Parameters..
    3) Riempite la form che vi appare con i valori desiderati:



    Come potete notare la form riassume proprio la struttura definita nel placeholder <NomeDB, stringa, >.

    4) Date l'ok ed eseguite la query.

    Una volta creato il vostro template, potete aggiungerlo a quelli predefiniti di SQL Server, creando un nuovo modello direttamente dal template explorer.



    Una volta creato, è sufficiente premere il destro sul template e selezionare Edit, creare il modello e salvare.
    Nel caso in cui si debba reinstallare il client o aggiornare la versione, ricordate che i template sono accessibili Application Data\Microsoft\Microsoft SQL Server\90\Tools\Shell\Templates (SQL SERVER 2005 su sistema operativo in INGLESE, in italiano la cartella è Dati Aplicazioni).

    Stay Tuned


     

  • [SSIS] Articolo sui SSIS Log Providers

    Grazie all'impegno di David, che ho stressato molto per la pubblicazione di alcuni miei articoli, è online "Il logging con Integration Services".

    "Perchè si è bloccata la mia applicazione? Che errori si sono verificati? Perchè il flusso d'esecuzione non procede nel modo corretto? Cerchiamo di capire come possono esserci utili le funzionalità di logging offerte da SQL Server e gli Integration Services per rendere più affidabili e consistenti le nostre applicazioni".

    Aspetto commenti e critiche .. spero possa comunque esservi di aiuto.

    Stay Tuned!