Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Sistema di Piattaforma Analitica (PDW)
Database SQL in Microsoft Fabric
L'utilità sqlcmd consente di immettere Transact-SQL istruzioni, procedure di sistema e file di script.
Note
Per scoprire quale variante e versione di sqlcmd è installata nel sistema, vedere Controllare la versione installata dell'utilità sqlcmd. Per informazioni su come ottenere sqlcmd, vedere Scaricare e installare l'utilità sqlcmd.
In aggiunta alle istruzioni Transact-SQL all'interno di sqlcmd, sono disponibili anche i comandi seguenti:
GO [ <count> ]:List[:]RESET:Error-
[:]ED1 :Out[:]!!:Perftrace[:]QUIT:Connect[:]EXIT:On Error:r:Help-
:ServerList1 -
:XML [ ON | OFF ]1 :Setvar:Listvar
1 Non supportato in Linux o macOS.
Quando si usano comandi sqlcmd , tenere presente quanto segue:
Tutti i comandi sqlcmd, ad eccezione di
GO, devono essere preceduti da due punti (:).Important
Per mantenere la compatibilità con le versioni precedenti degli script esistenti di osql, alcuni comandi vengono riconosciuti senza i due punti, indicato dal
:.I comandisqlcmd vengono riconosciuti solo se si trovano all'inizio di una riga.
Tutti i comandi sqlcmd non fanno distinzione tra maiuscole e minuscole.
Ogni comando deve trovarsi in una riga distinta. Un comando non può essere seguito da un'istruzione Transact-SQL o da un altro comando.
I comandi vengono eseguiti immediatamente e non vengono inseriti nel buffer di esecuzione come le istruzioni Transact-SQL.
Modifica dei comandi
[:]ED
Avvia l'editor di testo. Questo editor può essere utilizzato per modificare il batch Transact-SQL corrente o l'ultimo batch eseguito. Per modificare l'ultimo batch eseguito, il comando ED deve essere specificato subito dopo il completamento dell'esecuzione dell'ultimo batch.
L'editor di testo viene definito dalla variabile di ambiente SQLCMDEDITOR. L'editor predefinito è Edit. Per modificare l'editor, impostare la variabile di ambiente SQLCMDEDITOR. Ad esempio, per impostare l'editor su Blocco note di Microsoft, al prompt dei comandi digitare:
SET SQLCMDEDITOR=notepad
[:]RESET
Cancella la cache della dichiarazione.
:List
Stampa il contenuto della cache degli statement.
Variables
:Setvar <var> [ "valore" ]
Definisce delle variabili di scripting di sqlcmd. Il formato delle variabili di scripting è il seguente: $(VARNAME).
I nomi delle variabili non fanno distinzione tra maiuscole e minuscole.
È possibile impostare le variabili di scripting nei modi seguenti:
- In modo implicito utilizzando un'opzione della riga di comando. Ad esempio, l'opzione
-limposta la variabileSQLCMDLOGINTIMEOUTdi sqlcmd. - In modo esplicito utilizzando il comando
:Setvar. - Definizione di una variabile di ambiente prima di eseguire sqlcmd.
Note
L'opzione -X impedisce la trasmissione delle variabili di ambiente a sqlcmd.
Se il nome di una variabile definita mediante il comando :Setvar e di una variabile di ambiente è lo stesso, la variabile definita con :Setvar ha la precedenza.
I nomi delle variabili non devono contenere spazi vuoti.
I nomi delle variabili non possono disporre dello stesso formato delle espressioni con variabili, ad esempio $(var).
Se il valore stringa della variabile di scripting contiene spazi vuoti, racchiudere il valore tra virgolette. Se per una variabile di scripting non viene specificato alcun valore, la variabile di scripting viene eliminata.
:Listvar
Visualizza l'elenco delle variabili di scripting impostate.
Note
Vengono visualizzate solo le variabili di scripting impostate da sqlcmd e le variabili impostate tramite il :Setvar comando .
Comandi di output
:Errore <nome file> | STDERR | STDOUT
Reindirizza tutti gli output degli errori nel file specificato da filename verso stderr o stdout. Il comando :Error può essere utilizzato più volte in uno script. Per impostazione predefinita, l'output degli errori viene inviato a stderr.
filename
Crea e apre un file che riceverà l'output. Se il file esiste già, viene troncato a zero byte. Se il file non è disponibile a causa delle autorizzazioni o per altri motivi, l'output non verrà trasferito e verrà inviato all'ultima destinazione specificata oppure alla destinazione predefinita.
STDERR
Trasferisce l'output degli errori al flusso
stderr. Se l'output è stato reindirizzato, la destinazione a cui viene reindirizzato il flusso riceve l'output degli errori.STDOUT
Trasferisce l'output degli errori al flusso
stdout. Se l'output è stato reindirizzato, la destinazione a cui viene reindirizzato il flusso riceve l'output degli errori.
:Out <nome file> | STDERR | STDOUT
Crea e reindirizza tutti i risultati delle query nel file specificato da filename, in stderr oppure in stdout. Per impostazione predefinita, l'output viene inviato a stdout. Se il file esiste già, viene troncato a zero byte. Il comando :Out può essere utilizzato più volte in uno script.
:Perftrace <nome file> | STDERR | STDOUT
Crea e reindirizza tutte le informazioni di traccia delle prestazioni nel file specificato da filename, in stderr oppure in stdout. Per impostazione predefinita, l'output del monitoraggio delle prestazioni viene inviato in stdout. Se il file esiste già, viene troncato a zero byte. Il comando :Perftrace può essere utilizzato più volte in uno script.
Comandi di controllo dell'esecuzione
:Su Errore [ esci | ignora ]
Imposta l'azione da eseguire quando si verifica un errore durante l'esecuzione dello script o del batch.
Se si specifica l'opzione exit, l'utilità sqlcmd viene chiusa con il valore di errore appropriato.
Se viene utilizzata l'opzione ignore, sqlcmd ignora l'errore e continua l'esecuzione del batch o dello script. Per impostazione predefinita viene stampato un messaggio di errore.
[:]QUIT
Provoca la chiusura di sqlcmd .
[:]EXIT [ ( istruzione ) ]
Consente di usare il risultato di un'istruzione SELECT come valore restituito da sqlcmd. Se numerica, la prima colonna dell'ultima riga di risultati viene convertita in un valore integer di 4 byte (long). MS-DOS, Linux e macOS passano il byte meno significativo al livello di errore del processo padre o del sistema operativo. Windows 2000 e versioni successive passano l'intero valore intero di 4 byte. La sintassi è :EXIT(query).
Per esempio:
:EXIT(SELECT @@ROWCOUNT)
È inoltre possibile includere il parametro :EXIT in un file batch. Al prompt dei comandi, ad esempio, digitare:
sqlcmd -Q ":EXIT(SELECT COUNT(*) FROM '%1')"
L'utilità sqlcmd invia i dati tra parentesi (()) al server. Se una stored procedure di sistema seleziona un set e restituisce un valore, viene restituita solo la selezione. Se non si specifica alcun elemento tra le parentesi dell'istruzione :EXIT(), viene eseguito tutto ciò che la precede nel batch e l'operazione viene quindi terminata senza restituire alcun valore.
Se si specifica una query non corretta, l'utilità sqlcmd viene chiusa senza restituire alcun valore.
Ecco un elenco di formati EXIT:
:EXITNon esegue il batch, quindi si chiude immediatamente e non restituisce alcun valore.
:EXIT( )Esegue il batch, quindi termina e non restituisce alcun valore.
:EXIT(query)L'utilità esegue il batch in cui è inclusa la query e quindi viene chiusa dopo aver restituito i risultati della query.
Se RAISERROR viene utilizzato all'interno di uno script sqlcmd e viene rilevato uno stato di 127, sqlcmd si chiude e restituisce l'ID del messaggio al client. Per esempio:
RAISERROR(50001, 10, 127)
Questo errore comporta la chiusura dello script sqlcmd e la restituzione dell'ID di messaggio 50001 al client.
I valori restituiti compresi tra -1 e -99 sono riservati a SQL Server e l'utilità sqlcmd definisce i valori restituiti aggiuntivi elencati di seguito:
| Valore restituito | Description |
|---|---|
-100 |
Errore rilevato prima di selezionare il valore restituito. |
-101 |
Nessuna riga trovata durante la selezione del valore di ritorno. |
-102 |
Si è verificato un errore di conversione durante la selezione del valore restituito. |
GO [count]
GO indica sia la fine di un batch che l'esecuzione di eventuali istruzioni Transact-SQL memorizzate nella cache. Il batch viene eseguito più volte come lotti separati. Non è possibile dichiarare una variabile più di una volta in un singolo batch.
Comandi vari
:r <nome file>
Analizza le istruzioni Transact-SQL e i comandi sqlcmd aggiuntivi dal file specificato da filename nella cache delle istruzioni. filename viene letto in relazione alla directory di avvio in cui l'utilità sqlcmd è stata eseguita.
Se il file contiene istruzioni Transact-SQL non seguite da GO, è necessario immettere GO nella riga successiva a :r.
Il file verrà letto ed eseguito dopo aver incontrato un terminatore di batch. È possibile eseguire più comandi :r. Il file può includere qualsiasi comando sqlcmd , incluso il terminatore GObatch .
Note
Il numero di righe visualizzato in modalità interattiva viene aumentato di uno per ogni :r comando rilevato. Il comando :r viene visualizzato nell'output del comando list.
:ServerList
Elenca i server configurati localmente e i nomi dei server che trasmettono in rete.
:Connetti nome_server[\nome_istanza] [-l timeout] [-U nome_utente [-P password]]
Stabilisce la connessione a un'istanza di SQL Server. e inoltre chiude la connessione corrente.
Opzioni di timeout:
| Value | Behavior |
|---|---|
0 |
Aspetta per sempre |
n>0 |
Attendere n secondi |
La variabile di scripting SQLCMDSERVER riflette la connessione attuale.
Se timeout viene omesso, il valore predefinito corrisponde al valore della variabile SQLCMDLOGINTIMEOUT.
Se si specifica solo user_name, come opzione o come variabile di ambiente, all'utente verrà chiesto di immettere una password. Agli utenti non viene richiesto se sono impostate le SQLCMDUSER variabili di ambiente o SQLCMDPASSWORD . Se non si specificano opzioni o variabili di ambiente, per la connessione verrà usata la modalità di autenticazione di Windows. Ad esempio, per connettersi a un'istanza, instance1, di SQL Server, myserver, usando la sicurezza integrata, usare il comando seguente:
:connect myserver\instance1
Per connettersi all'istanza predefinita di myserver utilizzando le variabili di scripting, si utilizzano le seguenti impostazioni:
:setvar myusername test
:setvar myservername myserver
:connect $(myservername) $(myusername)
[:]!! command
Esegue i comandi del sistema operativo. Per eseguire un comando del sistema operativo, digitare due punti esclamativi all'inizio della riga (!!) seguiti dal comando del sistema operativo. Per esempio:
:!! dir
Note
Il comando viene eseguito nel computer in cui è in esecuzione sqlcmd .
:XML [ ON | OFF ]
Per altre informazioni, vedere Formato di output XML e Formato di output JSON in questo articolo
:Help
Elenca i comandi di sqlcmd con una breve descrizione di ognuno.
Nomi di file per sqlcmd
È possibile specificare i file di input disqlcmd con l'opzione -i o il comando :r. I file di output possono essere specificati con l'opzione -o o i :Errorcomandi , :Oute :Perftrace . Di seguito vengono illustrate alcune linee guida per l'utilizzo di tali file:
:Error,:Oute:Perftracedevono usare valori di nome file separati. Se viene usato lo stesso nome file, gli input provenienti dai comandi potrebbero essere mescolati.Se un file di input che si trova su un server remoto viene chiamato da sqlcmd su un computer locale, e il file contiene un percorso su disco fisso come
:Out c:\OutputFile.txt, il file di output viene creato sul computer locale e non sul server remoto.I percorsi di file validi includono
C:\<filename>,\\<Server>\<Share$>\<filename>e"C:\Some Folder\<file name>". Se il percorso contiene uno spazio, utilizzare le virgolette.Ogni nuova sessione di sqlcmd sovrascriverà i file esistenti con gli stessi nomi.
Messaggi informativi
sqlcmd stampa qualsiasi messaggio informativo inviato dal server. Nell'esempio seguente al termine dell'esecuzione delle istruzioni Transact-SQL viene stampato un messaggio informativo.
Avviare sqlcmd. Al prompt dei comandi di sqlcmd digitare la query:
USE AdventureWorks2022;
GO
Quando si preme INVIO, viene visualizzato il messaggio informativo seguente:
Changed database context to 'AdventureWorks2022'.
Formato di output delle query Transact-SQL
sqlcmd stampa prima di tutto un'intestazione di colonna contenente i nomi delle colonne specificati nell'elenco di selezione. I nomi di colonna sono separati usando il carattere SQLCMDCOLSEP. Per impostazione predefinita, questo separatore di colonna è uno spazio. Se la lunghezza del nome di colonna è minore della larghezza della colonna, l'output viene riempito con spazi fino alla larghezza della colonna successiva.
Questa riga sarà seguita da una linea di separazione composta da una serie di trattini. Di seguito è riportato un esempio di output.
Avviare sqlcmd. Al prompt dei comandi di sqlcmd digitare la query:
USE AdventureWorks2022;
SELECT TOP (2) BusinessEntityID,
FirstName,
LastName
FROM Person.Person;
GO
Quando si preme INVIO, viene restituito il set di risultati seguente.
BusinessEntityID FirstName LastName
---------------- ------------ ----------
285 Syed Abbas
293 Catherine Abel
(2 row(s) affected)
Anche se la BusinessEntityID colonna è larga solo quattro caratteri, si espande per contenere il nome di colonna più lungo. Per impostazione predefinita, l'output viene troncato a 80 caratteri. Questo valore può essere modificato usando l'opzione -w oppure impostando la variabile di scripting SQLCMDCOLWIDTH.
Formato di output XML
L'output XML risultante dalla clausola FOR XML viene restituito non formattato in un flusso continuo.
Quando è previsto output XML, utilizzare il comando: :XML ON.
Note
sqlcmd restituisce messaggi di errore nel formato standard. I messaggi di errore sono presenti anche nel flusso di testo XML in formato XML. Usando :XML ON, sqlcmd non visualizza messaggi informativi.
Per disattivare la modalità XML, usare il comando: :XML OFF.
Il comando GO non deve essere immesso prima dell'esecuzione del comando :XML OFF, poiché il comando :XML OFF reimposta sqlcmd sull'output orientato alle righe.
Non è possibile combinare dati XML (di flusso) e dati del set di righe. Se il comando non è stato eseguito prima dell'esecuzione :XML ON di un'istruzione Transact-SQL che restituisce flussi XML, l'output viene confuso. Dopo l'esecuzione del :XML ON comando, non è possibile eseguire Transact-SQL istruzioni che generano set di righe regolari.
Note
Il comando :XML non supporta l'istruzione SET STATISTICS XML.
Formato di output JSON
Quando è previsto un output JSON, usare il comando seguente: :XML ON. In caso contrario, l'output includerà sia il nome di colonna che il testo JSON. Questo output non è valido per JSON.
Per disattivare la modalità XML, usare il comando: :XML OFF.
Per altre informazioni, vedere Formato di output XML in questo articolo.
Usare l'autenticazione di Microsoft Entra
Esempi di uso dell'autenticazione Microsoft Entra
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30