Condividi tramite


Comandi nell'utilità sqlcmd

Si applica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSistema 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
  • [:]ED 1
  • :Out
  • [:]!!
  • :Perftrace
  • [:]QUIT
  • :Connect
  • [:]EXIT
  • :On Error
  • :r
  • :Help
  • :ServerList 1
  • :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 -l imposta la variabile SQLCMDLOGINTIMEOUT di 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:

  • :EXIT

    Non 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 :Perftrace devono 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