it-swarm.it

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

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.

19
Jonathan Allen

Se stai utilizzando SQLCMD , puoi utilizzare :r FileName per includere un file .sql separato.

: r FileName

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.

19

Nel senso dell'antico preprocessori C sicuramente no

  • T-SQL da solo non ha questo concetto
  • sqlcmd e sqlcmdmode di SSMS non gestiscono 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.

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

4
bernd_k

Insieme a 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 tilità 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 a volte preferisco eseguire batch (non più apertura di M Studio ... caricamento corretto db ... ecc.). Preferisco configurare tutto nel batch, inclusi i file di output.

3
Marian

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.

2
A-K

Mi piace bernd_k's answer. A seconda di come hai nominato i tuoi script, come includere un numero, SQL Server PowerShell (SQLPS) potrebbe essere utilizzato se esegui SQL Server 2008 o versioni successive. 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.
2
user507