Modifica di script SQLCMD con l'editor di query
Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Analytics Platform System (PDW)
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 comandi di sistema di Windows e istruzioni Transact-SQL vengono elaborati 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:
- Codice a colori
- Esecuzione degli script
- Controllo del codice sorgente
- Analisi di script
- Showplan
Abilitare lo 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.
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.
Nel contesto dell'editor di query vengono eseguite le istruzioni SQLCMD.
Sulla barra degli strumenti Editor SQL , nell'elenco Database disponibili , selezionare
AdventureWorks2022
.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 la 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 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à sqlcmd oppure eseguire l'esercitazione relativa a SQLCMD.
Abilitare lo 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.
Scrivere e modificare script SQLCMD
Dopo avere abilitato 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 comandicmd.exe
. Il testo dopo!!
viene passato acmd.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 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à regolare 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 saranno contraddistinti dal colore. 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