Condividi tramite


Utilità sqlcmd

Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure database SQL di Azure Synapse Analytics Platform System (PDW) in Microsoft Fabric

L'utilità sqlcmd consente di immettere istruzioni Transact-SQL, procedure di sistema e file di script usando diverse modalità disponibili:

  • Al prompt dei comandi.
  • Nell'editor di query in modalità SQLCMD.
  • In un file di script di Windows.
  • In un passaggio del processo del sistema operativo (cmd.exe) di un processo di SQL Server Agent.

Nota

Anche se Microsoft Entra ID è il nuovo nome per Azure Active Directory (Azure AD), per evitare l'interruzione degli ambienti esistenti, la denominazione Azure AD è tuttora mantenuta in alcuni elementi hardcoded, ad esempio campi dell'interfaccia utente, provider di connessioni, codici errore e cmdlet. All’interno di questo articolo i due nomi vengono utilizzati in modo intercambiabile.

Come verificare la versione installata

Sono disponibili due versioni di sqlcmd:

  • Sqlcmd basato su go-mssqldb, talvolta in stile go-sqlcmd. Questa versione è uno strumento autonomo che è possibile scaricare indipendentemente da SQL Server.

  • Sqlcmd basato su ODBC, disponibile con SQL Server o le utilità della riga di comando Microsoft e parte del pacchetto mssql-tools in Linux.

Per determinare la versione installata, eseguire l'istruzione seguente nella riga di comando:

sqlcmd "-?"
sqlcmd "-?"
sqlcmd -?

Se si usa la nuova versione di sqlcmd (Go), l'output è simile all'esempio seguente:

Version: 1.3.1

Controllare la versione

È possibile usare sqlcmd --version per determinare quale versione è installata. È necessario che sia installata almeno la versione 1.0.0.

Importante

L'installazione di sqlcmd (Go) tramite gestione pacchetti sostituirà sqlcmd (ODBC) con sqlcmd (Go) nel percorso dell'ambiente. Perché questa modifica sia effettiva, tutte le sessioni della riga di comando correnti devono essere chiuse e riaperte. sqlcmd (ODBC) non verrà rimosso e può comunque essere usato specificando il percorso completo del file eseguibile. È anche possibile aggiornare la variabile PATH per indicare quale versione ha la precedenza. A tale scopo in Windows 11, aprire Impostazioni di sistema e passare a Informazioni sulle impostazioni di sistema avanzate di >. Quando si apre Proprietà di sistema, selezionare il pulsante Variabili di ambiente. Nella metà inferiore, in Variabili di sistema selezionare Percorso e quindi Modifica. Se il percorso in cui viene salvato sqlcmd (Go) (C:\Program Files\sqlcmd, per impostazione predefinita) è elencato prima di C:\Program Files\Microsoft SQL Server\<version>\Tools\Binn, allora viene usato sqlcmd (Go). È possibile invertire l'ordine in modo che sqlcmd (ODBC) sia nuovamente il valore predefinito.

Scaricare e installare sqlcmd

sqlcmd (Go) può essere installato multipiattaforma, in Microsoft Windows, macOS e Linux. Le versioni più recenti della 1.6 potrebbero non essere disponibili in tutte le gestioni pacchetti. Non esiste ancora una data stimata per la disponibilità.

winget (CLI di Gestione pacchetti Windows)

  1. Installare il client Gestione pacchetti Windows se non è già disponibile.

  2. Eseguire il comando seguente per installare sqlcmd (Go).

    winget install sqlcmd
    

Chocolatey

  1. Installare Chocolatey se non è già presente.

  2. Eseguire il comando seguente per installare sqlcmd (Go).

    choco install sqlcmd
    

Download diretto

  1. Scaricare la risorsa -windows-amd64.zip o -windows-arm.zip corrispondente dalla versione più recente di sqlcmd (Go) dal repository di codice GitHub.

  2. Estrarre il file sqlcmd.exe dalla cartella zip scaricata.

Preinstallato

Azure Cloud Shell

È possibile provare l'utilità sqlcmd da Azure Cloud Shell poiché è preinstallata per impostazione predefinita:

Azure Data Studio

Per eseguire istruzioni sqlcmd in Azure Data Studio, selezionare Abilita SQLCMD dalla barra degli strumenti dell'editor.

SQL Server Management Studio (SSMS)

Per eseguire istruzioni SQLCMD in SQL Server Management Studio (SSMS), selezionare la modalità SQLCMD dal menu a discesa Query nella parte superiore della struttura di navigazione.

SSMS usa Microsoft .NET Framework SqlClient per l'esecuzione in modalità normale e SQLCMD nell'editor di query. Se l'utilità sqlcmd viene eseguita dalla riga di comando, sqlcmd usa il driver ODBC. Poiché possono essere applicate opzioni predefinite diverse, l'esecuzione della stessa query nella modalità SQLCMD di e nell'utilità sqlcmd potrebbe generare risultati diversi.

Sintassi

Usage:
  sqlcmd [flags]
  sqlcmd [command]

Examples:
# Install/Create, Query, Uninstall SQL Server
  sqlcmd create mssql --accept-eula --using https://aka.ms/AdventureWorksLT.bak
  sqlcmd open ads
  sqlcmd query "SELECT @@version"
  sqlcmd delete
# View configuration information and connection strings
  sqlcmd config view
  sqlcmd config cs

Available Commands:
  completion  Generate the autocompletion script for the specified shell
  config      Modify sqlconfig files using subcommands like "sqlcmd config use-context mssql"
  create      Install/Create SQL Server, Azure SQL, and Tools
  delete      Uninstall/Delete the current context
  help        Help about any command
  open        Open tools (e.g ADS) for current context
  query       Run a query against the current context
  start       Start current context
  stop        Stop current context

Flags:
  -?, --?                  help for backwards compatibility flags (-S, -U, -E etc.)
  -h, --help               help for sqlcmd
      --sqlconfig string   configuration file (default "/Users/<currentUser>/.sqlcmd/sqlconfig")
      --verbosity int      log level, error=0, warn=1, info=2, debug=3, trace=4 (default 2)
      --version            print version of sqlcmd

Use "sqlcmd [command] --help" for more information about a command.

Per altre informazioni dettagliate sulla sintassi e sull'uso di sqlcmd, vedere Sintassi di sqlcmd ODBC.

Modifiche che causano un'interruzione da sqlcmd (ODBC)

Diversi comportamenti e opzioni sono modificati nell'utilità sqlcmd (Go). Per l'elenco più aggiornato dei flag mancanti per la compatibilità con le versioni precedenti, vedere la discussione relativa alle priorità dell'implementazione dei flag di compatibilità back-compat di GitHub.

  • Nelle versioni precedenti di sqlcmd (Go), l'opzione -P è stata rimossa temporaneamente e le password per l'autenticazione di SQL Server possono essere fornite solo tramite questi meccanismi:

    • La variabile di ambiente SQLCMDPASSWORD
    • Il comando :CONNECT
    • Quando richiesto, l'utente può digitare la password per completare una connessione
  • -r richiede un argomento 0 o 1

  • L'opzione -R è rimossa.

  • L'opzione -I è rimossa. Per disabilitare il comportamento dell'identificatore delimitato, aggiungere SET QUOTED IDENTIFIER OFF negli script.

  • -N accetta ora un valore strimga che può essere true, false o disable per specificare la scelta di crittografia. (default equivale a omettere il parametro)

    • Se -N e -C non sono specificati, sqlcmd negozia l'autenticazione con il server senza convalidare il certificato del server.
    • Se -N è specificato ma -C non lo è, sqlcmd richiede la convalida del certificato del server. Un valore false per la crittografia potrebbe comunque applicare la crittografia al pacchetto di accesso.
    • Se vengono specificati -N e -C, sqlcmd ne usa i valori per la negoziazione della crittografia.
    • Altre informazioni sulla negoziazione della crittografia client/server sono disponibili in MS-TDS PRELOGIN.
  • -u Nel file di output Unicode generato sarà scritto il carattere BOM (Byte Order Mark) UTF-16 Little-Endian.

  • Alcuni comportamenti tenuti per mantenere la compatibilità con OSQL possono essere modificati, ad esempio l'allineamento delle colonne per alcuni tipi di dati.

  • Tutti i comandi devono adattarsi a una, anche EXIT. La modalità interattiva non verifica la presenza di parentesi aperte né di virgolette per i comandi e il prompt delle righe successive. Questo comportamento è diverso dalla versione ODBC, che consente all'esecuzione della query di EXIT(query) estendersi su più righe.

Le connessioni dall'utilità sqlcmd (Go) sono limitate alle connessioni TCP. Le named pipe non sono attualmente supportate nel driver go-mssqldb.

Miglioramenti

  • :Connect ora dispone di un parametro -G facoltativo per selezionare uno dei metodi di autenticazione per il database SQL di Azure - SqlAuthentication, ActiveDirectoryDefault, ActiveDirectoryIntegrated, ActiveDirectoryServicePrincipal, ActiveDirectoryManagedIdentity, ActiveDirectoryPassword. Per altre informazioni, vedere Autenticazione di Microsoft Entra. Se -G non è specificato, verrà usata la sicurezza integrata o l'autenticazione di SQL Server, in base alla presenza di un parametro di nome utente -U.

  • Il nuovo parametro della riga di comando --driver-logging-level consente di visualizzare le tracce dl driver del client go-mssqldb. Usare 64 per visualizzare tutte le tracce.

  • sqlcmd può ora stampare i risultati usando un formato verticale. Usare la nuova opzione -F vertical della riga di comando per impostarlo. Anche la variabile di scripting SQLCMDFORMAT lo controlla.

Opzioni della riga di comando

-A

Consente di accedere a SQL Server tramite una connessione amministrativa dedicata (DAC). Questo tipo di connessione viene utilizzato per eseguire la risoluzione dei problemi a livello di server Questa connessione funziona solo in computer server che supportano l'applicazione livello dati. Se la connessione DAC non è disponibile, l'utilità sqlcmd genera un messaggio di errore e viene chiusa. Per altre informazioni sulle connessioni DAC, vedere Connessione di diagnostica per gli amministratori di database. L'opzione -A non è supportata con l'opzione -G. Per eseguire la connessione al database SQL di Azure con -A, è necessario essere un amministratore di SQL Server. L'applicazione livello dati non è disponibile per un amministratore di Microsoft Entra.

C-

Questa opzione viene utilizzata dal client per configurare l'attendibilità implicita del certificato del server senza necessità di convalida. ed equivale all'opzione ADO.NET TRUSTSERVERCERTIFICATE = true.

Per l'utilità sqlcmd (Go), si applicano anche le condizioni seguenti:

  • Se -N e -C non sono specificati, sqlcmd negozia l'autenticazione con il server senza convalidare il certificato del server.
  • Se -N è specificato ma -C non lo è, sqlcmd richiede la convalida del certificato del server. Un valore false per la crittografia potrebbe comunque applicare la crittografia al pacchetto di accesso.
  • Se vengono specificati -N e -C, sqlcmd ne usa i valori per la negoziazione della crittografia.

-d nome_db

Esegue un'istruzione USE <db_name> all'avvio di sqlcmd. Questa opzione imposta la variabile di scripting SQLCMDDBNAME di sqlcmd. Questo parametro specifica il database iniziale. Il valore predefinito corrisponde alla proprietà relativa al database predefinito dell'accesso. Se il database non esiste, viene generato un messaggio di errore e l'utilità sqlcmd viene chiusa.

-D

Interpreta il nome del server fornito a -S come DSN anziché come nome host. Per altre informazioni, vedere Supporto di DSN in sqlcmd e bcp in Connessione con sqlcmd.

Nota

L'opzione -D è disponibile solo nei client Linux e MacOS. Nei client Windows, in precedenza veniva fatto riferimento a un'opzione ormai obsoleta che è stata rimossa ed è ignorata.

-l timeout_accesso

Specifica il numero dei secondi che devono trascorrere prima che si verifichi il timeout di un accesso di sqlcmd al driver ODBC quando si tenta la connessione a un server. Questa opzione imposta la variabile di scripting SQLCMDLOGINTIMEOUT di sqlcmd. Il valore predefinito per il timeout di accesso a sqlcmd è otto secondi. Quando si usa l'opzione -G per la connessione al database SQL di Azure o ad Azure Synapse Analytics e l'autenticazione è tramite Microsoft Entra ID, è consigliabile impostare un valore di timeout di almeno 30 secondi. Il valore del timeout deve essere un numero compreso tra 0 e 65534. Se il valore specificato non è numerico o non è compreso in tale intervallo, sqlcmd genera un messaggio di errore. Il valore 0 specifica un timeout infinito.

-E

Usa una connessione trusted anziché un nome utente e una password per l'accesso a SQL Server. In caso di omissione di -E, sqlcmd usa l'opzione della connessione trusted per impostazione predefinita.

L'opzione -E ignora eventuali impostazioni delle variabili di ambiente relative a nome utente e password, ad esempio SQLCMDPASSWORD. Se si usa l'opzione -E in combinazione con l'opzione -U o con l'opzione -P, viene generato un messaggio di errore.

-g

Imposta la crittografia delle colonne su Enabled. Per altre informazioni, vedere Always Encrypted. Sono supportate solo le chiavi master presenti nell'archivio certificati Windows. L'opzione -g richiede almeno sqlcmd versione 13.1. Per determinare la versione, eseguire sqlcmd -?.

-G

Questa opzione viene usata dal client durante la connessione al database SQL di Azure o ad Azure Synapse Analytics per specificare che l'utente deve essere autenticato tramite l'autenticazione di Microsoft Entra. Questa opzione imposta la variabile di scripting SQLCMDUSEAAD = true di sqlcmd. L'opzione -G richiede almeno sqlcmd versione 13.1. Per determinare la versione, eseguire sqlcmd -?. Per altre informazioni, vedere Connessione al database SQL o Azure Synapse Analytics con l'autenticazione di Microsoft Entra. L'opzione -A non è supportata con l'opzione -G.

L'opzione -G si applica solo al database SQL di Azure e ad Azure Synapse Analytics.

L'autenticazione interattiva di Microsoft Entra non è attualmente supportata in Linux o macOS. Per l'autenticazione integrata di Microsoft Entra sono necessari il driver Microsoft ODBC 17 per SQL Server versione 17.6.1 successiva e un ambiente Kerberos configurato correttamente.

Per altre informazioni sull'autenticazione di Microsoft Entra, vedere Autenticazione di Microsoft Entra in sqlcmd.

-H nome_workstation

Nome di una workstation. Questa opzione imposta la variabile di scripting SQLCMDWORKSTATION di sqlcmd. Il nome della workstation è riportato nella colonna hostname della vista del catalogo sys.sysprocesses e può essere ottenuto usando la stored procedure sp_who. Se questa opzione viene omessa, il valore predefinito è costituito dal nome del computer corrente. È possibile usare questo nome per identificare sessioni di sqlcmd diverse.

-j

Visualizza sullo schermo messaggi di errore non elaborati.

-K intento_applicazione

Dichiara il tipo di carico di lavoro dell'applicazione in caso di connessione a un server. L'unico valore attualmente supportato è ReadOnly. Se l'opzione -K non è specificata, sqlcmd non supporta la connettività a una replica secondaria in un gruppo di disponibilità. Per altre informazioni, vedere Repliche secondarie attive: Repliche secondarie leggibili (gruppi di disponibilità Always On)

-M failover_multisubnet

Specificare sempre -M in caso di connessione al listener di un gruppo di disponibilità di SQL Server o a un'istanza del cluster di failover di SQL Server. Tramite -M viene fornito un rilevamento più veloce di una connessione al server attualmente attivo. Se non si specifica -M, significa che l'opzione -M è disattivata. Per altre informazioni, vedere Listener, connettività client e failover dell'applicazione, Creazione e configurazione di gruppi di disponibilità (SQL Server), Clustering di failover e gruppi di disponibilità Always On (SQL Server) e Repliche secondarie attive: Repliche secondarie leggibili (Gruppi di disponibilità Always On).

-N

Questa opzione viene utilizzata dal client per richiedere una connessione crittografata.

Per l'utilità sqlcmd (Go), -N accetta ora un valore stringa che può essere true, false o disable per specificare la scelta di crittografia. (default equivale a omettere il parametro)

  • Se -N e -C non sono specificati, sqlcmd negozia l'autenticazione con il server senza convalidare il certificato del server.
  • Se -N è specificato ma -C non lo è, sqlcmd richiede la convalida del certificato del server. Un valore false per la crittografia potrebbe comunque applicare la crittografia al pacchetto di accesso.
  • Se vengono specificati -N e -C, sqlcmd ne usa i valori per la negoziazione della crittografia.

-P password

Una password specificata dall'utente. Per le password viene fatta distinzione tra maiuscole e minuscole. Se si usa l'opzione -U omettendo l'opzione -P e la variabile di ambiente SQLCMDPASSWORD non è stata impostata, sqlcmd chiede all'utente di immettere una password. Non è consigliabile usare la password null (vuota), ma è possibile specificarla usando una coppia di virgolette doppie contigue per il valore del parametro ("").

Importante

L'uso di -P deve essere considerato non sicuro. Evitare di assegnare la password nella riga di comando. In alternativa, usare la variabile di ambiente SQLCMDPASSWORD o immettere in modo interattivo la password omettendo l'opzione -P.

È consigliabile usare una password complessa.

La richiesta della password viene visualizzata mediante la stampa nella console, come indicato di seguito: Password:

L'input dell'utente è nascosto. L'input non viene pertanto visualizzato e il cursore rimane in posizione.

La variabile di ambiente SQLCMDPASSWORD consente di impostare una password predefinita per la sessione corrente. Per tale motivo, non è necessario specificare le password a livello di codice in file batch. Nell'esempio seguente viene innanzitutto impostata la variabile SQLCMDPASSWORD al prompt dei comandi e quindi si accede all'utilità sqlcmd.

Al prompt dei comandi digitare:

SET SQLCMDPASSWORD=p@a$$w0rd
sqlcmd
SET SQLCMDPASSWORD=p@a$$w0rd
sqlcmd
SET SQLCMDPASSWORD=p@a$$w0rd
sqlcmd

Se la combinazione di nome utente e password non è corretta, viene generato un messaggio di errore.

Nota

La variabile di ambiente OSQLPASSWORD è disponibile per motivi di compatibilità con le versioni precedenti. La variabile di ambiente SQLCMDPASSWORD ha la priorità rispetto alla variabile di ambiente OSQLPASSWORD. È quindi possibile usare sqlcmd e osql insieme senza conflitti Gli script usati in precedenza continueranno a funzionare.

Se si usa l'opzione -P in combinazione con l'opzione -E, viene generato un messaggio di errore.

Se l'opzione -P è seguita da più di un argomento, viene generato un messaggio di errore e il programma viene chiuso.

Una password contenente caratteri speciali può generare un messaggio di errore. È consigliabile eseguire l'escape dei caratteri speciali quando si usa -P o usare invece la variabile di ambiente SQLCMDPASSWORD.

-S [protocollo:]server[\nome_istanza][,porta]

Specifica l'istanza di SQL Server alla quale connettersi. Imposta la variabile di scripting di sqlcmd SQLCMDSERVER.

Specificare server_name per connettersi all'istanza predefinita di SQL Server nel computer server. Specificare nome_server[\nome_istanza] per connettersi a un'istanza denominata di SQL Server nel computer server. Se non si specifica alcun server, sqlcmd si connette all'istanza predefinita di SQL Server nel computer locale. Questa opzione è necessaria per l'esecuzione di sqlcmd da un computer remoto in rete.

protocol può essere tcp (TCP/IP), lpc (memoria condivisa) o np (named pipe).

Se non si specifica il valore di nome_server [\nome_istanza] all'avvio di sqlcmd, SQL Server verifica la presenza della variabile di ambiente SQLCMDSERVER.

Nota

La variabile di ambiente OSQLSERVER è disponibile per motivi di compatibilità con le versioni precedenti. La variabile di ambiente SQLCMDSERVER ha la priorità rispetto alla variabile di ambiente OSQLSERVER. È quindi possibile usare sqlcmd e osql insieme senza conflitti Gli script usati in precedenza continueranno a funzionare.

-U login_id

È il nome di accesso o il nome utente di un database indipendente. Per gli utenti dei database indipendenti, è necessario specificare l'opzione del nome di database (-d).

Nota

La variabile di ambiente OSQLUSER è disponibile per motivi di compatibilità con le versioni precedenti. La variabile di ambiente SQLCMDUSER ha la priorità rispetto alla variabile di ambiente OSQLUSER. È quindi possibile usare sqlcmd e osql insieme senza conflitti Gli script usati in precedenza continueranno a funzionare.

Se si omettono le opzioni -U e -P, sqlcmd prova a connettersi usando la modalità di autenticazione di Windows. L'autenticazione si basa sull'account Windows dell'utente che esegue sqlcmd.

Se si usa l'opzione -U in combinazione con l'opzione -E, descritta più avanti in questo articolo, viene generato un messaggio di errore. Se l'opzione -U è seguita da più di un argomento, viene generato un messaggio di errore e il programma viene chiuso.

-z nuova_password

Modificare la password:

sqlcmd -U someuser -P s0mep@ssword -z a_new_p@a$$w0rd
sqlcmd -U someuser -P s0mep@ssword -z a_new_p@a$$w0rd
sqlcmd -U someuser -P s0mep@ssword -z a_new_p@a$$w0rd

-Z nuova_password

Consente di modificare la password e di chiudere l'utilità:

sqlcmd -U someuser -P s0mep@ssword -Z a_new_p@a$$w0rd
sqlcmd -U someuser -P s0mep@ssword -Z a_new_p@a$$w0rd
sqlcmd -U someuser -P s0mep@ssword -Z a_new_p@a$$w0rd

Opzioni di input/output

-f codepage | i:codepage[,o:codepage] | o:codepage[,i:codepage]

Specifica le tabelle codici di input e output. Il numero specificato per codepage è un valore numerico che indica una tabella codici di Windows installata.

Regole di conversione delle tabelle codici

  • Se non viene specificata alcuna tabella codici, sqlcmd userà la tabella codici corrente per i file sia di input che di output, a meno che il file di input non sia un file Unicode per cui non è necessaria alcuna conversione.

  • sqlcmd riconosce automaticamente file di input Unicode sia di tipo Big-Endian che di tipo Little-Endian. Se è stata specificata l'opzione -u, l'output sarà sempre in formato Unicode Little-Endian.

  • Se non viene specificato alcun file di output, la tabella codici di output sarà costituita dalla tabella codici della console. Questo approccio consente la visualizzazione corretta dell'output nella console.

  • Se sono disponibili più file di input, vengono considerati appartenenti alla stessa tabella codici. È possibile combinare file di input Unicode e non Unicode.

Immettere chcp al prompt dei comandi per verificare la tabella codici di cmd.exe.

-i input_file[,input_file2...]

Identifica il file che include un batch di istruzioni Transact-SQL o stored procedure. È possibile specificare più file che verranno letti ed elaborati nell'ordine in cui sono stati indicati. Non utilizzare alcuno spazio tra i nomi di file. sqlcmd verificherà prima di tutto che tutti i file specificati esistano. Se uno o più file non esistono, l'utilità sqlcmd viene chiusa. Le opzioni -i e -Q/-q si escludono reciprocamente.

Percorsi di esempio:

-i C:\<filename>
-i \\<Server>\<Share$>\<filename>
-i "C:\Some Folder\<file name>"

È necessario racchiudere tra virgolette i percorsi dei file contenenti spazi.

Questa opzione può essere usata più di una volta.

sqlcmd -i <input_file1> -i <input_file2>
sqlcmd -i <input_file1> -i <input_file2>
sqlcmd -i <input_file1> -i <input_file2>

-o output_file

Identifica il file che riceve l'output di sqlcmd.

Se si specifica -u, file_output viene archiviato in formato Unicode. Se il nome file non è valido, viene generato un messaggio di errore e l'utilità sqlcmd viene chiusa. sqlcmd non supporta la scrittura simultanea di più processi sqlcmd nello stesso file. L'output del file risulterà danneggiato o non corretto. L'opzione -f è rilevante anche per i formati di file. Se il file non esiste, verrà creato. Un file con lo stesso nome di una sessione di sqlcmd precedente verrà sovrascritto. Il file specificato in questa posizione non corrisponde al file stdout. Se si specifica un file stdout, questo file non viene usato.

Percorsi di esempio:

-o C:< filename>
-o \\<Server>\<Share$>\<filename>
-o "C:\Some Folder\<file name>"

È necessario racchiudere tra virgolette i percorsi dei file contenenti spazi.

-r[0 | 1]

Reindirizza l'output dei messaggi di errore sullo schermo (stderr). Se il parametro viene omesso o si specifica 0, vengono reindirizzati solo i messaggi di errore con livello di gravità 11 o superiore. Se si specifica 1, viene reindirizzato l'output di tutti i messaggi di errore che includono PRINT. Questa opzione non ha alcun effetto se si usa -o. Per impostazione predefinita, i messaggi sono inviati a stdout.

Nota

Per l'utilità sqlcmd (Go), -r richiede un argomento 0 o 1.

-R

Si applica a: solo sqlcmd ODBC.

Fa in modo che sqlcmd localizzi le colonne numeriche, di valuta, di data e di ora recuperate da SQL Server in base alle impostazioni locali del client. Per impostazione predefinita, tali colonne vengono visualizzate usando le impostazioni internazionali del server.

-u

Specifica l'archiviazione di output_file in formato Unicode, indipendentemente dal formato di input_file.

Nota

Per l'utilità sqlcmd (Go), nel file di output Unicode generato è scritto il contrassegno byte (BOM) little endian UTF-16.

Opzioni relative all'esecuzione di query

-e

Scrive gli script di input nel dispositivo di output standard (stdout).

I-

Si applica a: solo sqlcmd ODBC.

Imposta l'opzione di connessione SET QUOTED_IDENTIFIER su ON. Per impostazione predefinita, questo valore è OFF. Per altre informazioni, vedere SET QUOTED_IDENTIFIER (Transact-SQL).

Nota

Per disabilitare il comportamento dell'identificatore tra virgolette, aggiungere SET QUOTED IDENTIFIER OFF negli script nell'utilità sqlcmd (Go).

-q "cmdline query"

Esegue una query all'avvio di sqlcmd senza chiudere sqlcmd al termine dell'esecuzione della query. È possibile eseguire più query delimitandole con punti e virgola. Racchiudere la query tra virgolette come illustrato nell'esempio seguente.

Al prompt dei comandi digitare:

sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"

sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"

sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"

sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"

Importante

Non utilizzare il carattere di terminazione GO nella query.

Se insieme a questa opzione si specifica -b, l'utilità sqlcmd viene chiusa in caso di errore. -b è descritto in questo articolo.

-Q "cmdline query"

Esegue una query all'avvio di sqlcmd e quindi chiude immediatamente sqlcmd. È possibile eseguire più query delimitandole con punti e virgola.

Racchiudere la query tra virgolette come illustrato nell'esempio seguente.

Al prompt dei comandi digitare:

sqlcmd -d AdventureWorks2022 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"

sqlcmd -d AdventureWorks2022 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"

sqlcmd -d AdventureWorks2022 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"

sqlcmd -d AdventureWorks2022 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"

Importante

Non utilizzare il carattere di terminazione GO nella query.

Se insieme a questa opzione si specifica -b, l'utilità sqlcmd viene chiusa in caso di errore. -b è descritto in questo articolo.

-t query_timeout

Specifica il numero di secondi prima del timeout di un comando (o un'istruzione Transact-SQL). Questa opzione imposta la variabile di scripting sqlcmd SQLCMDSTATTIMEOUT. Se non viene specificato un valore query_timeout, non si verifica il timeout del comando. Il valore di query_timeout deve essere un numero compreso tra 1 e 65534. Se il valore specificato non è numerico o non è compreso in tale intervallo, sqlcmd genera un messaggio di errore.

Nota

Il valore di timeout effettivo può variare di diversi secondi rispetto al valore specificato per timeout_query.

-v var = value [ var = value... ]

Crea una variabile di scripting di sqlcmdche può essere usata in uno script sqlcmd. Se il valore contiene spazi, racchiuderlo tra virgolette. È possibile specificare più valori <var>="<value>". Se in uno dei valori specificati è incluso un errore, l'utilità sqlcmd genera un messaggio di errore e viene chiusa.

sqlcmd -v MyVar1=something MyVar2="some thing"

sqlcmd -v MyVar1=something -v MyVar2="some thing"
sqlcmd -v MyVar1=something MyVar2="some thing"

sqlcmd -v MyVar1=something -v MyVar2="some thing"
sqlcmd -v MyVar1=something MyVar2="some thing"

sqlcmd -v MyVar1=something -v MyVar2="some thing"

-x

Indica a sqlcmd di ignorare le variabili di scripting. Questo parametro risulta utile quando uno script contiene numerose istruzioni INSERT che possono includere stringhe con lo stesso formato di variabili normali, ad esempio $(<variable_name>).

Opzioni di formattazione

-h intestazioni

Specifica il numero di righe da stampare tra le intestazioni delle colonne. Per impostazione predefinita, le intestazioni vengono stampate una volta per ogni set di risultati delle query. Questa opzione imposta la variabile di scripting SQLCMDHEADERS di sqlcmd. Usare -1 per non stampare alcuna intestazione. Eventuali valori non validi comportano la generazione di un messaggio di errore e la chiusura di sqlcmd.

-k [1 | 2]

Rimuove tutti i caratteri di controllo, ad esempio i caratteri di tabulazione e nuova riga, dall'output. Questo parametro conserva la formattazione di colonna quando vengono restituiti i dati.

  • -k rimuove i caratteri di controllo.
  • -k1 sostituisce ogni carattere di controllo con uno spazio.
  • -k2 sostituisce i caratteri di controllo consecutivi con uno spazio singolo.

-s separatore_col

Specifica il carattere separatore di colonna. L'impostazione predefinita è uno spazio vuoto. Questa opzione imposta la variabile di scripting SQLCMDCOLSEP di sqlcmd. Per usare caratteri con un significato speciale per il sistema operativo, ad esempio il carattere e commerciale (&) o il punto e virgola (;), racchiudere il carattere specifico tra virgolette ("). Il separatore di colonna può essere un carattere a 8 bit qualsiasi.

-w larghezza_schermo

Specifica la larghezza della schermata per l'output. Questa opzione imposta la variabile di scripting SQLCMDCOLWIDTH di sqlcmd. La larghezza della colonna deve essere un numero maggiore di 8 e minore di 65536. Se la larghezza della colonna specificata non rientra in tale intervallo, sqlcmd genera un messaggio di errore. La lunghezza predefinita è di 80 caratteri. Se una riga di output supera la larghezza di colonna specificata, la riga viene riportata nella riga successiva.

-W

Questa opzione rimuove gli spazi finali da una colonna. Usare questa opzione in combinazione con l'opzione -s quando si preparano i dati per l'esportazione in un'altra applicazione. Non è possibile usare questa opzione con -y o -Y.

-y variable_length_type_display_width

Imposta la variabile di scripting di sqlcmd SQLCMDMAXVARTYPEWIDTH. Il valore predefinito è 256. Limita il numero di caratteri restituiti per i tipi di dati a lunghezza variabile di grandi dimensioni:

  • varchar(max)
  • nvarchar(max)
  • varbinary(max)
  • xml
  • Tipi di dati definiti dall'utente (UDT)
  • Testo
  • ntext
  • Immagine

I tipi definiti dall'utente (UDT) possono essere a lunghezza fissa in base all'implementazione. Se la lunghezza di un tipo definito dall'utente (UDT) a lunghezza fissa è inferiore a display_width, il valore del tipo definito dall'utente (UDT) restituito non viene alterato. Se invece la lunghezza è superiore a display_width, l'output viene troncato.

Attenzione

Usare l'opzione -y 0 con estrema cautela, poiché potrebbe causare gravi problemi a livello di prestazioni del server e della rete, a seconda delle dimensioni dei dati restituiti.

-Y fixed_length_type_display_width

Imposta la variabile di scripting di sqlcmd SQLCMDMAXFIXEDTYPEWIDTH. Il valore predefinito è 0 (illimitato). Limita il numero di caratteri restituiti per i tipi di dati seguenti:

  • char(n), dove 1 <= n<= 8000
  • nchar(n), dove 1 <= n<= 4000
  • varchar(n), dove 1 <= n<= 8000
  • nvarchar(n), dove 1 <= n<= 4000
  • varbinary(n), dove 1 <= n<= 4000
  • sql_variant

Opzioni relative alla segnalazione degli errori

-b

Specifica che in caso di errore l'utilità sqlcmd viene chiusa restituendo un valore DOS ERRORLEVEL. Il valore restituito alla variabile ERRORLEVEL è 1 se il messaggio di errore di SQL Server ha un livello di gravità maggiore di 10. In caso contrario, il valore restituito è 0. Se è stata impostata l'opzione -V in combinazione con -b, sqlcmd non segnalerà l'errore se il livello di gravità è minore dei valori impostati tramite -V. I file batch del prompt dei comandi consentono di verificare il valore di ERRORLEVEL nonché di gestire correttamente l'errore. sqlcmd non segnala errori per il livello di gravità 10 (messaggi informativi).

Se lo script sqlcmd contiene un commento errato o un errore di sintassi o se una variabile di scripting risulta mancante, il valore di ERRORLEVEL restituito è 1.

-m error_level

Controlla i messaggi di errore inviati a stdout. Vengono inviati i messaggi a cui è associato un livello di gravità maggiore o uguale a questo livello. Quando questo valore è impostato su -1, vengono inviati tutti i messaggi, inclusi quelli informativi. Non sono consentiti spazi tra -m e -1. Ad esempio, -m-1 è valido e -m -1 non lo è.

Questa opzione imposta inoltre la variabile di scripting SQLCMDERRORLEVEL di sqlcmd. Per impostazione predefinita, il valore di questa variabile è 0.

-V error_severity_level

Controlla il livello di gravità utilizzato per impostare la variabile ERRORLEVEL. Tramite i messaggi di errore a cui sono associati livelli di gravità maggiori o uguali a questo valore viene impostato ERRORLEVEL. I valori minori di 0 vengono indicati come 0. È possibile utilizzare file batch e CMD per verificare il valore della variabile ERRORLEVEL.

Opzioni varie

-a packet_size

Richiede un pacchetto di dimensione diversa. Questa opzione imposta la variabile di scripting SQLCMDPACKETSIZE di sqlcmd. Il valore di packet_size deve essere compreso tra 512 e 32767. Il valore predefinito è 4096. Dimensioni più estese del pacchetto possono migliorare le prestazioni per l'esecuzione di script che dispongono di molte istruzioni SQL tra comandi GO. È possibile richiedere dimensioni di pacchetto superiori. Se tale richiesta viene negata, tuttavia, sqlcmd usa le dimensioni di pacchetto predefinite del server.

-c batch_terminator

Specifica il carattere di terminazione di batch. Per impostazione predefinita, i comandi vengono terminati e inviati a SQL Server tramite l'immissione della parola GO su una riga a sé stante. Se il carattere di terminazione di batch viene reimpostato, non utilizzare parole chiave riservate Transact-SQL o caratteri con un significato speciale per il sistema operativo anche se sono preceduti da una barra rovesciata.

-L[c]

Elenca i computer server configurati localmente e i nomi dei computer server che trasmettono in rete. Questo parametro non può essere utilizzato in combinazione con altri parametri. Il numero massimo di computer del server che è possibile specificare è 3000. Se l'elenco server è troncato a causa della dimensione del buffer, verrà visualizzato un messaggio di avviso.

Nota

A causa della natura delle trasmissioni in rete, è possibile che sqlcmd non riceva una risposta tempestiva da tutti i server e pertanto che l'elenco di server restituito sia diverso per ogni chiamata di questa opzione.

Se si specifica il parametro facoltativo c, l'output viene visualizzato senza la riga di intestazione Servers: e ogni riga del server viene elencata senza spazi iniziali. Questa presentazione è definita output pulito. L'output pulito consente di migliorare le prestazioni di elaborazione dei linguaggi di scripting.

-p[1]

Stampa le statistiche delle prestazioni per ogni set di risultati. Di seguito è riportato un esempio del formato delle statistiche delle prestazioni:

Network packet size (bytes): n

x xact[s]:

Clock Time (ms.): total       t1  avg       t2 (t3 xacts per sec.)

Dove:

  • x = numero di transazioni elaborate da SQL Server.
  • t1 = tempo totale per tutte le transazioni.
  • t2 = tempo medio per una singola transazione.
  • t3 = numero medio di transazioni al secondo.

Tutti i valori relativi al tempo sono espressi in millisecondi.

Se si specifica il parametro facoltativo 1, l'output delle statistiche è in formato separato da due punti. Questo formato può essere facilmente importato in un foglio di calcolo o elaborato da uno script.

Se il parametro facoltativo è un valore qualsiasi diverso da 1, viene generato un messaggio di errore e l'utilità sqlcmd viene chiusa.

-X[1]

Disabilita i comandi che potrebbero pregiudicare la sicurezza del sistema quando si esegue sqlcmd da un file batch. I comandi disabilitati vengono comunque riconosciuti. sqlcmd genera un messaggio di avviso e continua l'esecuzione. Se si specifica il parametro facoltativo 1, l'utilità sqlcmd genera un messaggio di errore e viene chiusa. Se si specifica l'opzione -X, vengono disabilitati i comandi seguenti:

  • ED
  • !! comando

Se si specifica l'opzione -X, le variabili di ambiente non vengono passate a sqlcmd. Questa opzione impedisce inoltre che venga eseguito lo script di avvio specificato utilizzando la variabile di scripting SQLCMDINI. Per altre informazioni sulle variabili di scripting di sqlcmd, vedere sqlcmd - Utilizzo con le variabili di scripting.

-?

Visualizza la versione di sqlcmd e il riepilogo della sintassi delle opzioni di sqlcmd .

Nota

In macOS eseguire invece sqlcmd '-?' (con virgolette).

Osservazioni:

Le opzioni non devono essere necessariamente utilizzate nell'ordine illustrato nella sezione della sintassi.

Se vengono restituiti più risultati, sqlcmd stampa una riga vuota tra ogni set di risultati in un batch. Inoltre, il messaggio <x> rows affected non viene visualizzato se non si applica all'istruzione eseguita.

Per usare sqlcmd in modo interattivo, digitare sqlcmd al prompt dei comandi con una o più delle opzioni precedentemente descritte in questo articolo. Per altre informazioni, vedere Utilizzo dell'utilità sqlcmd

Nota

Le opzioni -l, -Q, -Z o -i causano la chiusura di sqlcmd dopo l'esecuzione.

La lunghezza totale della riga di comando di sqlcmd nell'ambiente di comando (ad esempio cmd.exe o bash), inclusi tutti gli argomenti e le variabili espanse, corrisponde alla lunghezza determinata dal sistema operativo.

Precedenza delle variabili (in ordine crescente)

  1. Variabili di ambiente a livello di sistema
  2. Variabili di ambiente a livello di utente.
  3. Shell dei comandi (SET X=Y) impostata al prompt dei comandi prima dell'esecuzione di sqlcmd.
  4. sqlcmd -v X=Y
  5. :Setvar X Y

Nota

Per visualizzare le variabili di ambiente, nel Pannello di controllo aprire Sistema quindi fare clic sulla scheda Avanzate.

Variabili di scripting di sqlcmd

Variabile Opzione correlata L/S Predefiniti
SQLCMDUSER -U R ""
SQLCMDPASSWORD -P -- ""
SQLCMDSERVER S- R "DefaultLocalInstance"
SQLCMDWORKSTATION -H R "ComputerName"
SQLCMDDBNAME -d R ""
SQLCMDLOGINTIMEOUT -l L/S "8" (secondi)
SQLCMDSTATTIMEOUT -t L/S "0" = attesa illimitata
SQLCMDHEADERS -h L/S "0"
SQLCMDCOLSEP -s L/S " "
SQLCMDCOLWIDTH -w L/S "0"
SQLCMDPACKETSIZE -a R "4096"
SQLCMDERRORLEVEL -m L/S 0
SQLCMDMAXVARTYPEWIDTH -y L/S "256"
SQLCMDMAXFIXEDTYPEWIDTH -y L/S "0" = numero illimitato
SQLCMDEDITOR L/S "edit.com"
SQLCMDINI R ""
SQLCMDUSEAAD -G L/S ""

SQLCMDUSER, SQLCMDPASSWORD e SQLCMDSERVER vengono impostati quando viene usato :Connect.

La letteraR indica che il valore può essere impostato una sola volta durante l'inizializzazione del programma.

R/W indica che è possibile modificare il valore tramite il comando:setvar e che il nuovo valore influirà sui comandi successivi.

sqlcmd - comandi

In aggiunta alle istruzioni Transact-SQL all'interno di sqlcmd, sono disponibili anche i comandi seguenti:

GO [ numero ]

:List

[:]RESET

:Error

[:]ED

:Out

[:]!!

:Perftrace

[:]QUIT

:Connect

[:]EXIT

:On Error

:r

:Help

:ServerList

:XML [ ON | OFF ]

:Setvar

:Listvar

Quando si usano comandi sqlcmd , tenere presente quanto segue:

  • Tutti i comandi sqlcmd, ad eccezione di GO, devono essere preceduti da due punti (:).

    Importante

    Per garantire la compatibilità con le versioni precedenti per gli script osql esistenti, alcuni comandi verranno riconosciuti anche senza i due punti, indicati da :.

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

Comandi di modifica

[:]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 dell'istruzione.

Elenco:

Stampa il contenuto della cache dell'istruzione.

Variabili

:Setvar <var> [ "valore" ]

Definisce le 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.

  • Mediante la definizione di una variabile di ambiente prima dell'esecuzione di sqlcmd.

Nota

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.

Nota

Verranno visualizzate solo le variabili di scripting impostate da sqlcmd e quelle impostate usando il comando :Setvar.

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 alla quale il flusso è stato reindirizzato riceverà l'output degli errori.

  • STDOUT

    Trasferisce l'output degli errori al flusso stdout. Se l'output è stato reindirizzato, la destinazione alla quale il flusso è stato reindirizzato riceverà 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 della traccia 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

:On Error [ exit | ignore ]

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 Mac passano il byte di ordine inferiore 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).

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

Di seguito è riportato l'elenco dei formati EXIT supportati.

  • :EXIT

    L'utilità non esegue il batch, quindi viene chiusa immediatamente e non restituisce alcun valore.

  • :EXIT( )

    L'utilità esegue il batch, viene chiusa 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 in uno script sqlcmd si usa RAISERROR e si verifica una condizione con stato 127, l'utilità sqlcmd viene chiusa e restituisce al client l'ID di messaggio. Ad 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 Descrizione
-100 Si è verificato un errore prima di selezionare il valore restituito.
-101 Selezionando il valore restituito non si sono trovate righe.
-102 Si è verificato un errore di conversione durante la selezione del valore restituito.

GO [conteggio]

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 in batch 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 che è stato rilevato un carattere di terminazione di batch. È possibile eseguire più comandi :r. Il file può includere qualsiasi comando sqlcmd, incluso il terminatore batch GO.

Nota

Il conteggio delle righe visualizzato in modalità interattiva viene incrementato di 1 per ogni comando :r rilevato. Il comando :r verrà visualizzato nell'output del comando list.

:ServerList

Elenca i server configurati localmente e i nomi dei server che trasmettono in rete tramite broadcast.

:Connect 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:

Valore Comportamento
0 Attesa infinita
n>0 Attesa di n secondi

La variabile di scripting SQLCMDSERVER si adatterà alla connessione attiva corrente.

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 state impostate le variabili di ambiente SQLCMDUSER 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, specificare:

: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. Ad esempio:

:!! dir

Nota

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 (Guida):

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 comandi :Error, :Out e :Perftrace. Di seguito vengono illustrate alcune linee guida per l'utilizzo di tali file:

  • :Error, :Out e :Perftrace devono usare valori di nome file separati. Se viene usato lo stesso valore filename, è possibile che gli input di tali comandi vengano confusi.

  • Se un file di input che si trova in un server remoto viene chiamato da sqlcmd in un computer locale e contiene un percorso di file con unità 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 delimitati tramite il carattere specificato da SQLCMDCOLSEP. Per impostazione predefinita, viene utilizzato uno spazio. Se la lunghezza del nome di colonna è minore della larghezza della colonna, nell'output vengono inseriti caratteri di riempimento fino alla colonna successiva.

La riga sarà seguita da una riga di separazione costituita 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)

Nonostante la larghezza della colonna BusinessEntityID sia soltanto di quattro caratteri, la colonna viene espansa in modo da contenere un 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.

Nota

sqlcmd restituisce messaggi di errore nel formato standard. L'output dei messaggi di errore viene generato 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 :XML ON non è stato eseguito prima di un'istruzione Transact-SQL che genera flussi XML, l'output non viene visualizzato correttamente. Dopo che il comando :XML ON è stato eseguito, non è possibile eseguire istruzioni Transact-SQL che generano normali set di righe come output.

Nota

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.

Utilizzare Autenticazione 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

Procedure consigliate per sqlcmd

Utilizzare le procedure seguenti per ottimizzare i livelli di sicurezza ed efficienza.

  • Utilizzare la sicurezza integrata.

  • Utilizzare -X[1] negli ambienti automatizzati.

  • Proteggere i file di input e di output utilizzando autorizzazioni del file system NTFS appropriate.

  • Per incrementare le prestazioni, eseguire il maggior numero di operazioni possibile in un'unica sessione di sqlcmd , anziché in una serie di sessioni.

  • Per l'esecuzione di batch o query, impostare valori di timeout superiori rispetto al tempo che si prevede sarà necessario per eseguire il batch o la query.

Utilizzare le procedure seguenti per ottimizzare la correttezza:

  • Usare -V16 per registrare tutti i messaggi con livello di gravità 16. I messaggi con gravità 16 indicano errori generali che possono essere corretti dall'utente.

  • Verificare il codice di uscita e la variabile DOS ERRORLEVEL dopo che il processo è stato terminato. sqlcmd restituisce 0 normalmente, in caso contrario imposta ERRORLEVEL come configurato da -V. In altre parole, ERRORLEVEL non dovrà avere lo stesso valore del numero di errore segnalato da SQL Server. Il numero di errore è un valore specifico di SQL Server corrispondente alla funzione di sistema @@ERROR. ERRORLEVEL è un valore specifico di sqlcmd per indicare il motivo per cui sqlcmd è stato terminato e il suo valore viene influenzato specificando l'argomento della riga di comando -b.

L'uso di -V16 in combinazione con il controllo del codice di uscita e DOS ERRORLEVEL consente di rilevare gli errori negli ambienti automatizzati, in particolare i controlli di qualità prima di una versione di produzione.