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 accetta istruzioni Transact-SQL, 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.
Oltre alle istruzioni Transact-SQL all'interno di sqlcmd, usare 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.
Tenere presente quanto segue quando si usano i comandi sqlcmd :
Tutti i comandi sqlcmd , ad eccezione
GOdi , devono iniziare con due punti (:).Important
Per mantenere la compatibilità con le versioni precedenti con gli script osql esistenti, alcuni comandi funzionano senza i due punti (indicati da
[:]).sqlcmd riconosce i comandi solo se vengono visualizzati all'inizio di una riga.
Tutti i comandi sqlcmd non fanno distinzione tra maiuscole e minuscole.
Ogni comando deve trovarsi in una riga distinta. Non è possibile seguire un comando con un'istruzione Transact-SQL o 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. Usare questo editor per modificare il batch di Transact-SQL corrente o l'ultimo batch di esecuzione. Per modificare l'ultimo batch di esecuzione, digitare il ED comando immediatamente dopo il completamento dell'esecuzione dell'ultimo batch.
La SQLCMDEDITOR variabile di ambiente definisce l'editor di testo. L'editor predefinito è Edit. Per modificare l'editor, impostare la variabile di ambiente SQLCMDEDITOR. Ad esempio, per impostare l'editor su Blocco note Microsoft, digitare il comando seguente:
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
Reindirizzare tutto l'output degli errori al file specificato dal nome file, a stderro a stdout. Il comando :Error può essere utilizzato più volte in uno script. Per impostazione predefinita, l'output degli errori passa a stderr.
filename
Crea e apre un file che riceverà l'output. Un file esistente viene troncato a zero byte. Se il file non è disponibile a causa di autorizzazioni o altri motivi, l'output non viene modificato e l'ultima destinazione specificata o predefinita riceve l'output degli errori.
STDERR
Trasferisce l'output degli errori al flusso
stderr. Se l'output viene reindirizzato, la destinazione del reindirizzamento del flusso riceve l'output di errore.STDOUT
Trasferisce l'output degli errori al flusso
stdout. Se l'output viene reindirizzato, la destinazione a cui viene reindirizzato il flusso riceve il flusso di errore.
:Out <nome file> | STDERR | STDOUT
Crea e reindirizza tutti i risultati della query al file specificato dal nome file, a stderro a stdout. Per impostazione predefinita, l'output passa 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 al file specificato dal nome file, a stderro a stdout. Per impostazione predefinita, l'output della traccia delle prestazioni viene indirizzato a stdout. Un file esistente 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 di script o batch.
Quando si usa l'opzione exit , sqlcmd viene chiuso con il valore di errore appropriato.
Quando si usa l'opzione ignore , sqlcmd ignora l'errore e continua l'esecuzione del batch o dello script. Per impostazione predefinita, sqlcmd stampa un messaggio di errore.
[:]QUIT
Provoca la chiusura di sqlcmd .
[:]EXIT [ ( istruzione ) ]
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 intero a 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. L'istruzione :EXIT() con parentesi vuote esegue tutto ciò che precede nel batch e quindi esce senza un valore di ritorno.
Quando si specifica una query non corretta, sqlcmd viene chiuso senza un valore restituito.
Ecco un elenco di formati EXIT:
:EXITNon esegue il batch e quindi chiude immediatamente e non restituisce alcun valore.
:EXIT( )Esegue il batch e quindi chiude e non restituisce alcun valore.
:EXIT(query)Esegue il batch che include la query e quindi si chiude dopo la restituzione dei risultati della query.
Se si usa RAISERROR all'interno di uno script sqlcmd e si genera uno stato pari a 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 -1 restituiti da -99 sono riservati da SQL Server e sqlcmd definisce valori restituiti aggiuntivi:
| 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 batch separati. Non è possibile dichiarare una variabile più di una volta in un singolo batch.
Comandi vari
:r <nome file>
Analizza istruzioni aggiuntive Transact-SQL e comandi sqlcmd dal file specificato dal nome file nella cache delle istruzioni. sqlcmd legge il nome file relativo alla directory di avvio.
Se il file contiene istruzioni Transact-SQL non seguite da GO, è necessario immettere GO nella riga successiva a :r.
sqlcmd legge ed esegue il file dopo che rileva un terminatore 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 aumenta 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.
:Connect server_name[\instance_name] [-l timeout] [-U user_name [-P password]] [-N[s|m|o]] [-F hostname_in_certificate]
Stabilisce la connessione a un'istanza di SQL Server. e inoltre chiude la connessione corrente.
Important
Il :Connect comando non funge da separatore batch implicito. Tutte le istruzioni Transact-SQL memorizzate nel buffer nel batch corrente non vengono eseguite finché non viene eseguito un comando GO . Se si usano più :Connect comandi senza istruzioni intermedie GO , tutte le istruzioni memorizzate nel buffer vengono eseguite sull'ultimo server connesso e non su ogni server singolarmente.
Opzioni di crittografia (
-N[s|m|o]):Usare questa opzione per richiedere una connessione crittografata. Se non si include
-N,-Nm(permandatory) è l'impostazione predefinita. Questa opzione è una modifica che rappresenta un cambiamento significativo rispetto a SQL Server 2022 (16.x) e versioni precedenti, dove-No(peroptional) è l'impostazione standard.Value Description -NsRigido -Nm(impostazione predefinita)Obbligatorio -NoOpzionale Nome host nel certificato (
-F hostname_in_certificate)Specifica un Nome Comune (CN) o un Nome Alternativo del Soggetto (SAN) previsto e diverso nel certificato del server da usare durante la convalida del certificato del server. Senza questa opzione, la convalida del certificato garantisce che il CN o il SAN nel certificato corrisponda al nome del server a cui ci si connette. Questo parametro può essere popolato quando il nome del server non corrisponde al CN o al SAN, ad esempio quando si usano alias DNS.
Opzioni di timeout:
Value Behavior 0Aspetta per sempre n>0Attendere n secondi La variabile di scripting
SQLCMDSERVERriflette 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), sqlcmd richiede 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 tramite variabili di scripting, usare le impostazioni seguenti:
:setvar myusername test
:setvar myservername myserver
:connect $(myservername) $(myusername)
[:]!! command
Esegue i comandi del sistema operativo. Per eseguire un comando del sistema operativo, avviare una riga con due punti esclamativi (!!) seguiti dal comando del sistema operativo. Per esempio:
:!! dir
Note
Il comando viene eseguito nel computer in cui viene eseguito sqlcmd .
:XML [ ON | OFF ]
Per altre informazioni, vedere Formato di output XML e Formato di output JSON in questo articolo
:Help
Elenca i comandi sqlcmd , insieme a una breve descrizione di ogni comando.
Nomi di file per sqlcmd
Specificare i file di input sqlcmd usando l'opzione -i o il :r comando . Specificare i file di output usando l'opzione -o oppure i comandi :Error, :Out e :Perftrace. Quando si usano questi file, usare le linee guida seguenti:
Usare valori di nome file separati per
:Error,:Oute:Perftrace. Se si usa lo stesso nome file, i comandi potrebbero mescolare gli input.Se si richiama da sqlcmd in un computer locale un file di input situato su un server remoto e il file contiene un percorso di unità disco, ad esempio,
:Out c:\OutputFile.txt, sqlcmd crea il file di output sul computer locale anziché 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, dopo che sqlcmd esegue le istruzioni Transact-SQL, viene stampato un messaggio informativo.
Avviare sqlcmd. Al prompt dei comandi di sqlcmd digitare la query:
USE AdventureWorks2025;
GO
Quando si preme INVIO, sqlcmd stampa il messaggio informativo seguente:
Changed database context to 'AdventureWorks2025'.
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 il nome della colonna è più breve della larghezza della colonna, sqlcmd riempie l'output con spazi fino alla colonna successiva.
sqlcmd stampa una linea separatore che rappresenta una serie di caratteri trattini. Di seguito è riportato un esempio di output.
Avviare sqlcmd. Al prompt dei comandi di sqlcmd digitare la query:
USE AdventureWorks2025;
SELECT TOP (2) BusinessEntityID,
FirstName,
LastName
FROM Person.Person;
GO
Quando si preme INVIO, sqlcmd restituisce 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, sqlcmd termina l'output a 80 caratteri. È possibile modificare questa larghezza usando l'opzione -w o impostando la SQLCMDCOLWIDTH variabile di scripting.
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 che usano l'autenticazione di 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