Esiste un concetto di "file include" in SQL Server?


19

Ho una serie di script che devono essere eseguiti in un certo ordine. Vorrei creare un "file master" che elenca tutti gli altri file e il loro ordine corretto. Fondamentalmente come un file include da C ++ o ASP / VBScript.

Risposte:


19

Se si utilizza SQLCMD , è possibile utilizzare :r FileNameper includere un file .sql separato.

: r Nomefile

Analizza ulteriori istruzioni T-SQL e comandi SQLCMD dal file specificato da FileName nella cache delle istruzioni. FileName viene letto relativamente alla directory di avvio per Visual Studio. Il file viene letto ed eseguito dopo aver incontrato un terminatore batch. È possibile emettere più comandi: r. Il file può includere qualsiasi comando SQLCMD, incluso il terminatore batch definito in Strumenti, Opzioni. È possibile utilizzare: r in uno script pre-distribuzione o post-distribuzione per includere altri script.


Stai usando questa funzione tu stesso?
bernd_k,

Lo sto usando pesantemente nei progetti SQL Server Data Tools. Aiuta davvero quando sto cercando di organizzare i dati di esempio eseguiti come post script.
Jonathan Allen

4

Nel senso degli antichi preprocessori C sicuramente no

  • T-SQL da solo non ha questo concetto
  • sqlcmd e sqlcmdmode di SSMS non gestiscono i percorsi dei file relativi
  • sqlcmd e sqlcmdmode di SSMS non supportano l'inclusione condizionale

Se si dispone di una serie di file con percorsi assoluti indicati, che si desidera includere in un ordine incondizionato, è possibile utilizzare lo strumento da riga di comando sqlcmd o utilizzare SSMS in sqlcmdmode come indicato da @mfredrickson e @Marian.


Ma se vuoi percorsi relativi o inclusioni condizionali devi usare un wrapper che chiama sqlcmd (o uno dei suoi predecessori obsoleti isql o osql).

Attualmente al mio lavoro in questa situazione, sto rivedendo ed estendendo il vecchio codice vbs e il codice hta. Non sono completamente felice, ma è una decisione pragmatica. Funziona e l'utente finale è a casa con la GUI hta e non è necessaria alcuna installazione aggiuntiva del software.

Per un nuovo design vorrei iniziare a pensare di utilizzare WPF e PowerShell per concludere le chiamate di sqlcmd, ma con i nostri attuali clienti non posso presumere la presenza di PowerShell V2.

Anche in passato abbiamo scritto semplici lotti di cmd per questo scopo, alcuni dei quali ancora in uso.

Immagino che ci siano strumenti attuali, in particolare quelli destinati ai flussi di lavoro, che potrebbero essere adatti qui. Non ho familiarità con quelli.


3

Insieme alla modalità SQLCMD in Management Studio, è anche possibile utilizzare un file batch da utilizzare come file master per disporre e chiamare tutti i file sql utilizzando l' utilità SQLCMD .

La modalità SQLCMD è una simulazione dell'utilizzo delle utility all'interno di Management Studio, quindi non c'è grande differenza tra le modalità. Tranne che qualche volta preferisco eseguire batch (non più apertura di M Studio ... caricamento corretto db ... ecc.). Preferisco configurare tutto nel batch, inclusi i file di output.


2

Sono d'accordo, un preprocessore T-SQL è estremamente necessario. Ho sviluppato il mio in C #, che mi ha impiegato un'ora. Oltre al controllo sull'ordine di esecuzione degli script SQL, mi consente anche di avere macro che assomigliano a UDF scalari e sono comode da usare, ma offrono prestazioni veloci come UDF in linea.


+1 - Ho fatto questo genere di cose con gli strumenti di template in diverse occasioni. Sebbene sqlcmd abbia alcune funzionalità per la sostituzione variabile, darei a qualcuno che ha implementato un plug-in di pre-processore decente per SSMS un grande bacio sul fondo.
Preoccupato di

1
@AK, ti dispiacerebbe approfondire un po 'di più? Magari pubblica del codice su github?
Craig,

2

Mi piace la risposta di bernd_k . A seconda della modalità di denominazione degli script, ad esempio l'inclusione di un numero, è possibile utilizzare SQL Server PowerShell (SQLPS) se si esegue SQL Server 2008 o versione successiva. Quindi, anche se si utilizza SQL 2005, è possibile utilizzare PowerShell e SMO per il 2005.

Nota a margine: credo che SQLCMD alla fine verrà inserito nell'elenco deprezzato e verrà sostituito con SQLPS, PowerShell.

Ci sono anche alcune altre opzioni.

  1. Configurare ogni script come passaggio in un processo di SQL Agent. È possibile impostare l'ordine in cui vengono eseguiti.
  2. Creare un pacchetto SSIS per chiamare ciascun file. Questo può offrire un po 'più controllo e offrire un po' più opzioni di registrazione. Mi piace questo metodo se il risultato di uno script deve essere verificato prima dell'esecuzione del successivo.

Non credo che SQLCMD sarà deprezzato perché è così vitale per il funzionamento di SQL Server Data Tools e DACPAC.
Jonathan Allen

@JonathanAllen Se ti capita di trovare una documentazione corrente che mostra la gestione dei DACPAC usando SQLCMDfammelo sapere, perché la maggior parte di ciò che trovo si riferisce a PowerShell . Inoltre non vedo il riferimento dove sqlcmdviene utilizzato con SSDT tranne forse per il confronto dello schema, ma non uso mai gli script generati.
Shawn Melton

Gli script SSDT sono script sqlcmd. Ecco come gestisce i parametri, sia definiti dall'utente che cose come il nome del database. Se si desidera distribuire il DACPAC utilizzando SqlPackage.exe, questo collegamento mostra come passare i parametri sqlcmd. msdn.microsoft.com/en-us/…
Jonathan Allen
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.