Modifica di script SQLCMD con l'editor di query

Usando 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 usati quando è necessario elaborare comandi di sistema di Windows e istruzioni Transact-SQL nello stesso script.

Modalità SQLCMD

Per usare 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 usare nell'editor di query le stesse caratteristiche disponibili per tutti gli script Transact-SQL. Di seguito vengono descritte alcune di queste caratteristiche:

  • 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, usare la procedura descritta di seguito.

Per attivare la modalità SQLCMD per una finestra dell'editor di query del Motore di database

  1. 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.

  2. Scegliere Modalità SQLCMD dal menu Query.

    Nel contesto dell'editor di query vengono eseguite le istruzioni sqlcmd .

  3. Sulla barra degli strumenti Editor SQL, in Database disponibili selezionare AdventureWorks2012.

  4. Nella finestra Editor di query digitare le due istruzioni Transact-SQL seguenti e l'istruzione !!DIR sqlcmd:

    SELECT DISTINCT Type FROM Sales.SpecialOffer;  
    GO  
    !!DIR  
    GO  
    SELECT ProductCategoryID, Name FROM Production.ProductCategory;  
    GO  
    
  5. 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.

  6. 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 consente un'interazione completa con il sistema operativo. Quando si usa 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 altre informazioni sull'esecuzione di SQLCMD, vedere Utilità sqlcmdoppure 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 querye SSQL 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. Si applicano le seguenti regole:

  • 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.execome 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 usato 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 SQLCMD predefinite. L'elaborazione di SQLCMD da parte di SQL Server Management Studio fa distinzione tra maiuscole e minuscole per le variabili. Ad esempio, PRINT '$ (COMPUTERNAME)' produce il risultato corretto, ma PRINT '$ (ComputerName)' restituisce un errore.

Attenzione

SQL Server Management Studio usa Microsoft.NET FrameworkSqlClient per l'esecuzione in modalità normale e SQLCMD. 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

L'esempio seguente usa un'istruzione sqlcmd per creare un file di output denominato testoutput.txt ed esegue 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  

Vedi anche

Utilità sqlcmd