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
Istanza gestita di Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL database in Microsoft Fabric
L'utilità sqlcmd consente di immettere istruzioni Transact-SQL, procedure di sistema e file di script usando diverse modalità disponibili:
- At the command prompt.
- In modalità SQLCMD nell'Editor di Query.
- In un file di script di Windows.
- In an operating system (
cmd.exe
) job step of a SQL Server Agent job.
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:
The
go-mssqldb
-based sqlcmd, sometimes styled as 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.
To determine the installed version, run the following statement at the command line:
sqlcmd "-?"
sqlcmd "-?"
sqlcmd -?
Se si usa la nuova versione di sqlcmd (Go), l'output è simile all'esempio seguente:
Version: 1.8.2
Controllare la versione
È possibile usare sqlcmd --version
per determinare quale versione è installata. È necessario che sia installata almeno la versione 1.0.0.
Important
L'installazione di sqlcmd (Go) tramite una gestione pacchetti sostituisce sqlcmd (ODBC) con sqlcmd (Go) nel percorso dell'ambiente. You must close and reopen any current command line sessions for this change to take effect.
sqlcmd (ODBC) isn't removed, and can still be used by specifying the full path to the executable. È anche possibile aggiornare la variabile PATH
per indicare quale 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)
Installare il client Gestione pacchetti Windows se non è già disponibile.
Eseguire il comando seguente per installare sqlcmd (Go).
winget install sqlcmd
Chocolatey
Installare Chocolatey se non è già presente.
Eseguire il comando seguente per installare sqlcmd (Go).
choco install sqlcmd
Download diretto
Scaricare la risorsa
-windows-amd64.zip
o-windows-arm.zip
corrispondente dalla versione più recente di sqlcmd (Go) dal repository di codice GitHub.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 della barra di navigazione in alto.
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. Because different default options could apply, you might see different behavior when you execute the same query in SSMS in SQLCMD Mode and in the sqlcmd utility.
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.
Breaking changes from sqlcmd (ODBC)
Diversi comportamenti e opzioni sono modificati nell'utilità sqlcmd (Go). Per l'elenco più aggiornato dei flag mancanti per la retrocompatibilità, visita la discussione su GitHub Prioritizzare l'implementazione dei flag di retrocompatibilità.
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
- La variabile di ambiente
-r
richiede un argomento0
o1
L'opzione
-R
è rimossa.L'opzione
-I
è rimossa. To disable quoted identifier behavior, addSET QUOTED IDENTIFIER OFF
in your scripts.-N
accetta ora un valore strimga che può esseretrue
,false
odisable
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 valorefalse
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.
- Se
-u
The generated Unicode output file has the UTF-16 Little-Endian Byte-order mark (BOM) written to it.Some behaviors that were kept to maintain compatibility with
OSQL
might have changed, such as alignment of column headers for some data types.Tutti i comandi devono stare su una sola riga, compreso
EXIT
. La modalità interattiva non verifica la presenza di parentesi aperte né di virgolette nei comandi e non richiede l'inserimento di righe successive. Questo comportamento è diverso dalla versione ODBC, che consente all'esecuzione della query diEXIT(query)
estendersi su più righe.
Le connessioni dall'utilità sqlcmd (Go) sono limitate alle connessioni TCP. Named pipes aren't supported at this time in the go-mssqldb
driver.
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 del drivergo-mssqldb
. Usare64
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 scriptingSQLCMDFORMAT
lo controlla.
Opzioni della riga di comando
The following table lists the command-line options available in sqlcmd, and which operating systems they support.
Opzioni relative al login
-A
Applies to: Windows only. Linux and macOS are not supported.
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 con i computer server che supportano DAC. 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. DAC non è disponibile per un amministratore di Microsoft Entra.
Nota
For information on how to make a dedicated administrator connection (DAC) on macOS or Linux, see Programming Guidelines.
-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 valorefalse
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 db_name
Esegue un'istruzione USE <db_name>
all'avvio di sqlcmd. Questa opzione imposta la variabile di scripting sqlcmd. Questo parametro specifica il database iniziale. The default is your login's default-database property. 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. For more information, see DSN support in sqlcmd and bcp.
Nota
L'opzione -D
è disponibile solo nei client Linux e MacOS. On Windows clients, it refers to an obsolete option which has been removed, and is ignored.
-l login_timeout
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 sqlcmd. Il valore predefinito per il timeout di accesso a sqlcmd è otto secondi. When using the -G
option to connect to Azure SQL Database or Azure Synapse Analytics and authenticate using Microsoft Entra ID, a time out value of at least 30 seconds is recommended. The login time-out must be a number between 0
and 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. Per impostazione predefinita, in caso di omissione di -E
, sqlcmd usa l'opzione della connessione attendibile.
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.
Nota
For more information about making trusted connections that use integrated authentication from a Linux or macOS client, see Using Integrated Authentication.
-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
This option is used by the client when connecting to Azure SQL Database or Azure Synapse Analytics, to specify that the user is authenticated with Microsoft Entra authentication. Questa opzione imposta la variabile di scripting 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. Microsoft Entra integrated authentication requires Microsoft ODBC Driver 17 for SQL Server version 17.6.1 or higher and a properly configured Kerberos environment.
Per altre informazioni sull'autenticazione di Microsoft Entra, vedere Autenticazione di Microsoft Entra in sqlcmd.
-H nome_postazione
Nome di una workstation. Questa opzione imposta la variabile di scripting sqlcmd. The workstation name is listed in the hostname
column of the sys.sysprocesses
catalog view, and can be returned using the 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à. For more information, see Active Secondaries: Readable Secondary Replica (Always On Availability Groups).
Nota
-K
isn't supported in SUSE Linux Enterprise Server (SLES). You can, however, specify the ApplicationIntent=ReadOnly
keyword in a DSN file passed to sqlcmd. For more information, see DSN Support in sqlcmd and bcp later in this article.
For more information, see High availability and disaster recovery on Linux and macOS.
-M multisubnet_failover
Always specify -M
when connecting to the availability group listener of a SQL Server availability group or a SQL Server Failover Cluster Instance. 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. For more information about Listeners, Client Connectivity, Application Failover, Creation and Configuration of Availability Groups (SQL Server), Failover Clustering and Always On Availability Groups (SQL Server), and Active Secondaries: Readable Secondary Replicas(Always On Availability Groups).
Nota
-M
isn't supported in SUSE Linux Enterprise Server (SLES). You can, however, specify the MultiSubnetFailover=Yes
keyword in a DSN file passed to sqlcmd. For more information, see DSN Support in sqlcmd and bcp later in this article.
For more information, see High availability and disaster recovery on Linux and macOS.
-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 valorefalse
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.
Nota
On Linux and macOS, [s|m|o]
were added in sqlcmd 18.0.
-P password
Una password specificata dall'utente. Per le password viene fatta distinzione tra maiuscole e minuscole. If the -U
option is used, the -P
option isn't used, and the SQLCMDPASSWORD
environment variable isn't set, sqlcmd prompts the user for a password. Non è consigliabile usare la password null (vuota), ma è possibile specificarla usando una coppia di virgolette doppie contigue per il valore del parametro (""
).
Important
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 stampando la richiesta di password nella console, come indicato di seguito: Password:
L'input dell'utente è nascosto. Nulla viene 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, immettere quanto segue. Sostituire <password>
con una password valida.
SET SQLCMDPASSWORD=<password>
sqlcmd
SET SQLCMDPASSWORD=<password>
sqlcmd
SET SQLCMDPASSWORD=<password>
sqlcmd
Se la combinazione di nome utente e password non è corretta, viene generato un messaggio di errore.
Nota
The OSQLPASSWORD
environment variable is kept for backward compatibility. 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 precedenti continuano 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. You should escape special characters when using -P
, or use the SQLCMDPASSWORD
environment variable instead.
On Linux and macOS, when used with the -G
option without -U
, -P
specifies a file that contains an access token (v17.8+). The token file should be in UTF-16LE (no BOM) format.
Access tokens can be obtained via various methods. You must ensure the access token is correct byte-for-byte, because it's sent as-is. Following is an example command that obtains an access token. The command uses the Azure CLI and Linux commands and saves it to a file in the proper format. If your system or terminal's default encoding isn't ASCII or UTF-8, you might need to adjust the iconv
options. Be sure to carefully secure the resulting file and delete it when it's no longer required.
az account get-access-token --resource https://database.windows.net --output tsv | cut -f 1 | tr -d '\n' | iconv -f ascii -t UTF-16LE > /tmp/tokenFile
-S [protocollo:]server[\nome_istanza][,porta]
Specifica l'istanza di SQL Server alla quale connettersi. It sets the sqlcmd scripting variable 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
(pipe nominata).
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
The OSQLSERVER
environment variable is kept for backward compatibility. 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 precedenti continuano a funzionare.
The ODBC driver on Linux and macOS requires -S
. The only valid protocol value is tcp
.
-U login_id
Nome di accesso o nome utente contenuto nel database. Per gli utenti dei database contenuti, è necessario specificare il nome del database (-d
).
Nota
The OSQLUSER
environment variable is kept for backward compatibility. 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 precedenti continuano 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. Sostituire <oldpassword>
con la vecchia password e <newpassword>
con la nuova password.
sqlcmd -U someuser -P <oldpassword> -z <newpassword>
sqlcmd -U someuser -P <oldpassword> -z <newpassword>
sqlcmd -U someuser -P <oldpassword> -z <newpassword>
-Z nuova_password
Modificare la password e uscire. Sostituire <oldpassword>
con la vecchia password e <newpassword>
con la nuova password.
sqlcmd -U someuser -P <oldpassword> -Z <newpassword>
sqlcmd -U someuser -P <oldpassword> -Z <newpassword>
sqlcmd -U someuser -P <oldpassword> -Z <newpassword>
Opzioni di input/output
-f codepage | i:codepage[,o:codepage] | o:codepage[,i:codepage]
Specifica le pagine di codice di input e output. Il numero di pagina di codice è un valore numerico che specifica una pagina di codice di Windows installata.
Code-page conversion rules:
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. If the
-u
option is specified, the output is always little-endian Unicode.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.
Multiple input files are assumed to be of the same code page. È possibile combinare file di input Unicode e non Unicode.
Immettere chcp
al prompt dei comandi per verificare la tabella codici di cmd.exe
.
Nota
On Linux, the codepage number is a numeric value that specifies an installed Linux code page (available since 17.5.1.1).
-i input_file[,input_file2...]
Identifica il file che contiene un gruppo di istruzioni Transact-SQL o procedure memorizzate. È possibile specificare più file che vengono letti ed elaborati in ordine. 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.
Nota
Se si usa l'opzione -i
seguita da uno o più parametri aggiuntivi, è necessario usare uno spazio tra il parametro e il valore. Si tratta di un problema noto in sqlcmd (Go).
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.
This option can be used more than once:
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]
Redirects the error message output to the screen (stderr
). Se il parametro viene omesso o si specifica 0
, vengono reindirizzati solo i messaggi di errore con livello di gravità 11 o superiore. If you specify 1
, all error message output including PRINT
is redirected. 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
Applies to: ODBC sqlcmd only.
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.
Nota
On Linux and macOS, -R
currently only uses en_US
(US English) formatting.
-u
Specifica l'archiviazione di output_file in formato Unicode, indipendentemente dal formato di input_file.
Nota
For the sqlcmd (Go) utility, the generated Unicode output file has the UTF-16 Little-Endian Byte-order mark (BOM) written to it.
Opzioni relative all'esecuzione di query
-e
Scrive gli script di input nel dispositivo di output standard (stdout
).
-I
Applies to: ODBC sqlcmd only.
Imposta l'opzione di connessione SET QUOTED_IDENTIFIER
su ON
. The default setting is OFF
. Per altre informazioni, vedere SET QUOTED_IDENTIFIER (Transact-SQL).
Nota
Per disabilitare il comportamento dell'identificatore tra virgolette nell'utilità sqlcmd (Go), aggiungere SET QUOTED IDENTIFIER OFF
nei propri script.
-q "cmdline query"
Executes a query when sqlcmd starts, but doesn't exit sqlcmd when the query is finished. Multiple semicolon-delimited queries can be executed. Use quotation marks around the query, as shown in the following example.
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;"
Important
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
is described elsewhere in this article.
-Q "cmdline query"
Esegue una query all'avvio di sqlcmd e quindi chiude immediatamente sqlcmd. È possibile eseguire più query delimitandole con punti e virgola.
Use quotation marks around the query, as shown in the following example.
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;"
Important
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
is described elsewhere in this article.
-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 sqlcmdSQLCMDSTATTIMEOUT
. 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 dal valore di query_timeout specificato di diversi secondi.
-v var = value [ var = value... ]
Applies to: Windows only. Linux and macOS are not supported.
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 è utile quando uno script contiene molte istruzioni INSERT
che potrebbero contenere stringhe con lo stesso formato delle variabili regolari, ad esempio $(<variable_name>)
.
Opzioni di formattazione
-h headers
Specifies the number of rows to print between the column headings. The default is to print headings one time for each set of query results. Questa opzione imposta la variabile di scripting sqlcmd. Usare -1
per specificare che le intestazioni non vengano stampate. Eventuali valori non validi comportano la generazione di un messaggio di errore e la chiusura di sqlcmd.
-k [1 | 2]
Removes all control characters, such as tabs and new line characters from the 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 col_separator
Specifies the column-separator character. L'impostazione predefinita è uno spazio vuoto. Questa opzione imposta la variabile di scripting sqlcmd. To use characters that have special meaning to the operating system, such as the ampersand (&
) or semicolon (;
), enclose the character in quotation marks ("
). 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 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. When an output line exceeds the specified column width, it wraps on to the next line.
-W
This option removes trailing spaces from a column. 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
Sets the sqlcmd scripting variable 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)
- text
- ntext
- Immagine
UDTs can be of fixed length depending on the implementation. 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
Use the -y 0
option with extreme caution, because it can cause significant performance issues on both the server and the network, depending on the size of data returned.
-Y fixed_length_type_display_width
Sets the sqlcmd scripting variable 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
. If the -V
option is set, in addition to -b
, sqlcmd doesn't report an error if the severity level is lower than the values set using -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 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
. Error messages that have severity levels greater than or equal to this value set 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 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
Specifies the batch terminator. Per impostazione predefinita, i comandi vengono terminati e inviati a SQL Server tramite l'immissione della parola GO
su una riga a sé stante. When you reset the batch terminator, don't use Transact-SQL reserved keywords or characters that have special meaning to the operating system, even if they're preceded by a backslash.
-L[c]
Applies to: Windows only. Linux and macOS are not supported.
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 della trasmissione in reti, sqlcmd potrebbe non ricevere una risposta tempestiva da tutti i server. Therefore, the list of servers returned can vary for each invocation of this option.
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. This presentation is referred to as clean output. 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.)
Where:
-
x
= Number of transactions processed by 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.
Nota
Se si usa l'opzione -i
seguita da uno o più parametri aggiuntivi, è necessario usare uno spazio tra il parametro e il valore. Si tratta di un problema noto in sqlcmd (Go).
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)
- Variabili di ambiente a livello di sistema
- Variabili di ambiente a livello di utente.
- Interfaccia a riga di comando (
SET X=Y
) impostata al prompt dei comandi prima dell'esecuzione di sqlcmd. sqlcmd -v X=Y
:Setvar X Y
Nota
Per visualizzare le variabili di ambiente, nel Pannello di controllo aprire Sistema quindi fare clic sulla scheda Avanzate.
sqlcmd scripting variables
Variable | Opzione correlata | R/W | Default |
---|---|---|---|
SQLCMDUSER |
-U |
R | "" |
SQLCMDPASSWORD |
-P |
-- | "" |
SQLCMDSERVER |
-S |
R | "DefaultLocalInstance" |
SQLCMDWORKSTATION |
-H |
R | "ComputerName" |
SQLCMDDBNAME |
-d |
R | "" |
SQLCMDLOGINTIMEOUT |
-l |
R/W | "8" (seconds) |
SQLCMDSTATTIMEOUT |
-t |
R/W | "0" = attesa illimitata |
SQLCMDHEADERS |
-h |
R/W | "0" |
SQLCMDCOLSEP |
-s |
R/W | " " |
SQLCMDCOLWIDTH |
-w |
R/W | "0" |
SQLCMDPACKETSIZE |
-a |
R | "4096" |
SQLCMDERRORLEVEL |
-m |
R/W | 0 |
SQLCMDMAXVARTYPEWIDTH |
-y |
R/W | "256" |
SQLCMDMAXFIXEDTYPEWIDTH |
-Y |
R/W | "0" = numero illimitato |
SQLCMDEDITOR |
R/W | "edit.com" | |
SQLCMDINI |
R | "" | |
SQLCMDUSEAAD |
-G |
R/W | "" |
SQLCMDUSER
,SQLCMDPASSWORD
eSQLCMDSERVER
vengono impostati quando viene usato:Connect
.La lettera
R
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 commands
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 Not supported on Linux or 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.
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 della dichiarazione.
Elenco:
Stampa il contenuto della cache degli statement.
Variables
:Setvar <var> [ "value" ]
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 variabileSQLCMDLOGINTIMEOUT
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
Only scripting variables that are set by sqlcmd, and variables that are set using the :Setvar
command, are displayed.
Output commands
:Error <filename> | STDERR | STDOUT
Redirect all error output to the file specified by filename, to stderr
or to stdout
. Il comando :Error
può essere utilizzato più volte in uno script. By default, error output is sent to 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
Switches error output to the
stderr
stream. If this has been redirected, the target to which the stream has been redirected receives the error output.STDOUT
Switches error output to the
stdout
stream. If this has been redirected, the target to which the stream has been redirected receives the error output.
:Out <filename> | 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 <filename> | 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
: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
Causes sqlcmd to exit.
[:]EXIT [ ( statement ) ]
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, and macOS pass the low byte to the parent process or operating system error level. Windows 2000 and later versions passes the whole 4-byte integer. 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.
Ecco un elenco di formati EXIT
:
:EXIT
Non esegue il batch, quindi si chiude immediatamente e non restituisce alcun valore.
:EXIT( )
Esegue il batch e poi termina senza restituire alcun valore.
:EXIT(query)
Executes the batch that includes the query, and then quits after it returns the results of the 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. 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 |
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. The batch is executed multiple times as separate batches. Non è possibile dichiarare una variabile più di una volta in un singolo batch.
Comandi vari
:r <filename>
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
. The file can include any sqlcmd command, including the batch terminator GO
.
Nota
The line count that is displayed in interactive mode is increased by one for every :r
command encountered. 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. Also closes the current connection.
Time-out options:
Valore | Comportamento |
---|---|
0 |
Attesa infinita |
n>0 |
Wait for n seconds |
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. Users aren't prompted if the SQLCMDUSER
or SQLCMDPASSWORD
environment variables are set. 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)
[:]!! comando
Executes operating system commands. 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
Elenca i comandi di sqlcmd con una breve descrizione di ognuno.
sqlcmd file names
È possibile specificare i file di input disqlcmd con l'opzione -i
o il comando :r
. Output files can be specified with the -o
option or the :Error
, :Out
, and :Perftrace
commands. Di seguito vengono illustrate alcune linee guida per l'utilizzo di tali file:
:Error
,:Out
, and:Perftrace
should use separate filename values. 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.
Start 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 è 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.
Start 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)
Although the BusinessEntityID
column is only four characters wide, it is expanded to accommodate the longer column name. 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. 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. If the :XML ON
command wasn't issued before a Transact-SQL statement that outputs XML streams is executed, the output is garbled. Once the :XML ON
command is issued, you can't execute Transact-SQL statements that output regular row sets.
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 [email protected] -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 [email protected] -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 [email protected] -P MyAzureADPassword -l 30
DSN support in sqlcmd and bcp
You can specify a data source name (DSN) instead of a server name in the sqlcmd or bcp -S
option (or sqlcmd :Connect
command) if you specify -D
.
-D
causes sqlcmd or bcp to connect to the server specified in the DSN by the -S
option.
System DSNs are stored in the odbc.ini
file in the ODBC SysConfigDir
directory (/etc/odbc.ini
on standard installations). User DSNs are stored in .odbc.ini
in a user's home directory (~/.odbc.ini
).
On Windows systems, System and User DSNs are stored in the registry and managed via odbcad32.exe
.
bcp and sqlcmd don't support file DSNs.
See DSN and Connection String Keywords and Attributes for the list of entries that the driver supports.
In a DSN, only the DRIVER
entry is required, but to connect to a remote server, sqlcmd or bcp needs a value in the SERVER
element. If the SERVER
element is empty or not present in the DSN, sqlcmd and bcp attempt to connect to the default instance on the local system.
When you use bcp on Windows systems, SQL Server 2017 (14.x) and earlier versions require the SQL Native Client 11 driver (sqlncli11.dll
), while SQL Server 2019 (15.x) and later versions require the Microsoft ODBC Driver 17 for SQL Server driver (msodbcsql17.dll
).
If the same option is specified in both the DSN and the sqlcmd or bcp command line, the command line option overrides the value used in the DSN. For example, if the DSN has a DATABASE
entry and the sqlcmd command line includes -d
, the value passed to -d
is used. If Trusted_Connection=yes
is specified in the DSN, Kerberos authentication is used; user name (-U
) and password (-P
), if provided, are ignored.
Existing scripts that invoke isql
can be modified to use sqlcmd by defining the following alias: alias isql="sqlcmd -D"
.
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 appropriate del file system.
Per incrementare le prestazioni, eseguire il maggior numero di operazioni possibile in un'unica sessione di sqlcmd , anziché in una serie di sessioni.
Impostare i valori di timeout per l'esecuzione di batch o query in modo che siano più elevati di quanto si prevede possa essere necessario per eseguire il batch o la query.
Utilizzare le procedure seguenti per ottimizzare la correttezza:
Usare
-V 16
per registrare tutti i messaggi con livello di gravità 16. I messaggi con gravità 16 indicano errori generali che possono essere corretti dall'utente.Check the exit code and
DOS ERRORLEVEL
variable after the process exits. sqlcmd restituisce0
normalmente, in caso contrario impostaERRORLEVEL
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 -V 16
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.
Contenuto correlato
- Altre informazioni sulla nuova utilità go-sqlcmd in GitHub
- Avvio rapido: Eseguire immagini del contenitore di SQL Server in Linux con Docker
- sqlcmd - Avviare l'utilità
- sqlcmd - Eseguire file script Transact-SQL
- sqlcmd - Usare l'utilità
- sqlcmd - Use with scripting variables
- sqlcmd - Connettersi al motore di database
- Modifica script SQLCMD con il Gestore delle query
- Manage Job Steps
- Create a CmdExec Job Step