Modifica di script SQLCMD con l'editor di query
Se si utilizza l'editor di query del Motore di database in SQL Server Management Studio, è possibile scrivere e modificare query come script SQLCMD. Gli script SQLCMD vengono utilizzati quando è necessario elaborare comandi di sistema di Windows e istruzioni Transact-SQL nello stesso script.
Modalità SQLCMD
Per utilizzare l'editor di query del Motore di database per scrivere o modificare script SQLCMD, è necessario abilitare la modalità di scripting SQLCMD, che per impostazione predefinita non è abilitata nell'editor di query. Per attivare la modalità di scripting, fare clic sull'icona Modalità SQLCMD sulla barra degli strumenti oppure scegliere Modalità SQLCMD dal menu Query.
[!NOTA]
L'abilitazione della modalità SQLCMD disattiva IntelliSense e il debugger Transact-SQL nell'editor di query del Motore di database.
Per gli script SQLCMD è possibile utilizzare nell'editor di query le stesse funzionalità disponibili per tutti gli script Transact-SQL. Di seguito vengono descritte alcune di queste funzionalità:
Codifica a colori
Esecuzione di script
Controllo del codice sorgente
Analisi di script
Showplan
Attivazione di scripting SQLCMD nell'editor di query
Per attivare script SQLCMD per una finestra dell'editor di query del Motore di database attiva, utilizzare la procedura descritta di seguito.
Per attivare la modalità SQLCMD per una finestra dell'editor di query del Motore di database
In Esplora oggetti fare clic con il pulsante destro del mouse sul server, quindi scegliere Nuova query per aprire una nuova finestra dell'editor di query del Motore di database.
Scegliere Modalità SQLCMD dal menu Query.
Verranno eseguite istruzioni sqlcmd nel contesto dell'editor di query.
Sulla barra degli strumenti Editor SQL selezionare AdventureWorks nell'elenco Database disponibili.
Nella finestra dell'editor di query digitare le due istruzioni Transact-SQL e l'istruzione !!DIR sqlcmd seguenti:
SELECT DISTINCT Type FROM Sales.SpecialOffer; GO !!DIR GO SELECT ProductCategoryID, Name FROM Production.ProductCategory; GO
Premere F5 per eseguire l'intera sezione di istruzioni miste Transact-SQL e MS-DOS.
Si notino i due riquadri dei risultati SQL relativi alla prima e alla terza istruzione.
Nel riquadro Risultati fare clic sulla scheda Messaggi per visualizzare i messaggi relativi alle tre istruzioni:
(Righe interessate: 6)
<Informazioni della directory>
(Righe interessate: 4)
Importante |
---|
Quando viene eseguita dalla riga di comando, l'utilità sqlcmd garantisce un'interazione completa con il sistema operativo. Quando si utilizza l'editor di query in Modalità SQLCMD, è necessario assicurarsi che non vengano eseguite istruzioni interattive. L'editor di query non è in grado di rispondere alle richieste del sistema operativo. |
Per ulteriori informazioni sull'esecuzione di SQLCMD, vedere Utilità sqlcmd oppure eseguire l'esercitazione relativa a SQLCMD.
Attivazione di scripting SQLCMD per impostazione predefinita
Per attivare la modalità di scripting SQLCMD per impostazione predefinita, scegliere Opzioni dal menu Strumenti, espandere Esecuzione query e SQL Server, fare clic sulla pagina Generale e quindi selezionare la casella di controllo Per impostazione predefinita, apri le nuove query in modalità SQLCMD.
Scrittura e modifica di script SQLCMD
Dopo avere attivato la modalità di scripting, sarà possibile immettere comandi SQLCMD e istruzioni Transact-SQL. Sono applicabili le regole seguenti:
I comandi SQLCMD devono essere specificati come prima istruzione di una riga.
È consentito un solo comando SQLCMD per riga.
I comandi SQLCMD possono essere preceduti da commenti o da spazio vuoto.
I comandi SQLCMD all'interno di commenti non vengono eseguiti.
I caratteri per i commenti a riga singola sono due segni meno (--) e devono essere visualizzati all'inizio della riga.
I comandi del sistema operativo devono essere preceduti da due punti esclamativi (!!). Il comando formato da due punti esclamativi attiva l'esecuzione dell'istruzione immediatamente seguente tramite il processore dei comandi cmd.exe. Il testo dopo !! viene passato a cmd.exe come parametro e pertanto la riga di comando finale verrà eseguita come: "%SystemRoot%\system32\cmd.exe /c <text after !!>".
Per una chiara distinzione tra i comandi SQLCMD e Transact-SQL, è necessario che tutti i comandi SQLCMD utilizzino come prefisso un carattere due punti (:).
Il comando GO può essere utilizzato senza prefisso oppure può essere preceduto da !!:
L'editor di query del Motore di database supporta variabili di ambiente e variabili definite come parte di uno script SQLCMD, ma non supporta variabili osql o variabili predefinite SQLCMD. L'elaborazione di SQLCMD da parte di SQL Server Management Studio distingue tra maiuscole e minuscole nelle variabili. Ad esempio, PRINT '$ (COMPUTERNAME)' produce il risultato corretto, ma PRINT '$ (ComputerName)' restituisce un errore.
Attenzione |
---|
Per l'esecuzione in modalità regolare e SQLCMD, SQL Server Management Studio utilizza Microsoft.NET FrameworkSqlClient. Quando viene eseguito dalla riga di comando, SQLCMD utilizza il provider OLE DB. Poiché le opzioni predefinite che è possibile applicare sono diverse, l'esecuzione della stessa query in modalità SQLCMD di SQL Server Management Studio e nell'utilità SQLCMD potrebbe generare risultati diversi. |
Sintassi SQLCMD supportata
L'editor di query del Motore di database supporta le parole chiave degli script SQLCMD seguenti:
[!!:]GO[count]
!! <command>
:exit(statement)
:Quit
:r <filename>
:setvar <var> <value>
:connect server[\instance] [-l login_timeout] [-U user [-P password]]
:on error [ignore|exit]
:error <filename>|stderr|stdout
:out <filename>|stderr|stdout
[!NOTA]
Sia per :error sia per :out, stderr e stdout inviano l'output alla scheda Messaggi.
I comandi SQLCMD non inclusi nell'elenco precedente non sono supportati nell'editor di query. Quando viene eseguito uno script contenente parole chiave SQLCMD non supportate, per ognuna di esse l'editor di query invierà un messaggio "Ignoring command <comando ignorato>" alla destinazione. Lo script verrà eseguito, ma i comandi non supportati verranno ignorati.
Attenzione |
---|
Poiché SQLCMD non viene avviato dalla riga di comando, l'esecuzione dell'editor di query in modalità SQLCMD presenta alcune limitazioni. Non è possibile passare parametri della riga di comando come variabili e poiché l'editor di query non è in grado di rispondere ai prompt del sistema operativo, evitare di eseguire istruzioni interattive. |
Codifica a colori negli script SQLCMD
Quando è attivata la modalità di scripting SQLCMD, gli script avranno codifica a colori. La codifica a colori per le parole chiave Transact-SQL rimarrà invariata. I comandi SQLCMD vengono presentati con uno sfondo ombreggiato.
Esempio
Nell'esempio seguente viene utilizzata l'istruzione sqlcmd per creare un file di output denominato testoutput.txt e vengono eseguite due istruzioni Transact-SQL SELECT insieme a un comando del sistema operativo (per stampare la directory corrente). Il file risultante contiene l'output del messaggio dall'istruzione DIR, seguito dall'output dei risultati dalle istruzioni Transact-SQL.
:out C:\testoutput.txt
SELECT @@VERSION As 'Server Version'
!!DIR
!!:GO
SELECT @@SERVERNAME AS 'Server Name'
GO