Utilità sqlcmd
Si applica a:SQL Serverdatabase SQL di AzureIstanza gestita di SQL di AzureAzure Synapse AnalyticsPiattaforma di strumenti analitici (PDW)
L'utilità sqlcmd consente di immettere istruzioni Transact-SQL, procedure di sistema e file di script tramite varie modalità:
- 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, Azure AD rimane ancora in alcuni elementi codificati, ad esempio campi dell'interfaccia utente, provider di connessioni, codici di errore e cmdlet. In questo articolo i due nomi sono intercambiabili.
Individuare la versione installata
Esistono due versioni di sqlcmd:
Sqlcmd
go-mssqldb
basato su , 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
mssql-tools
pacchetto 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.
Nota
Per SQL Server 2014 (12.x) e versioni precedenti, vedere Utilità sqlcmd.
Per l'uso di sqlcmd in Linux, vedere Installare sqlcmd e bcp in Linux.
Importante
L'installazione di sqlcmd (Go) tramite gestione pacchetti sostituirà sqlcmd (ODBC) con sqlcmd (Go) nel percorso dell'ambiente. Tutte le sessioni della riga di comando correnti dovranno essere chiuse e riaperte per rendere effettive le sessioni della riga di comando. sqlcmd (ODBC) non verrà rimosso e può comunque essere usato specificando il percorso completo del file eseguibile. È anche possibile aggiornare la PATH
variabile per indicare quale avrà la precedenza. A tale scopo in Windows 11, aprire Impostazioni di sistema e passare a Informazioni sulle > impostazioni di sistema avanzate. 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 sqlcmd (Go) viene salvato in (C:\Program Files\sqlcmd
è predefinito) è elencato prima C:\Program Files\Microsoft SQL Server\<version>\Tools\Binn
di , 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.
winget (interfaccia della riga di comando 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à disponibile.
Eseguire il comando seguente per installare sqlcmd (Go).
choco install sqlcmd
Download diretto
Scaricare l'asset o corrispondente
-windows-x64.zip
dalla versione più recente di sqlcmd (Go) dal repository di-windows-arm.zip
codice GitHub.Estrarre il file
sqlcmd.exe
dalla cartella zip scaricata.
Preinstallato
Azure Cloud Shell
È possibile provare l'utilità sqlcmd da Azure Cloud Shell, perché è preinstallata per impostazione predefinita:
Azure Data Studio
Per eseguire istruzioni SQLCMD in Azure Data Studio, selezionare Abilita SQLCMD sulla barra degli strumenti dell'editor.
SQL Server Management Studio (SSMS)
Per eseguire istruzioni SQLCMD in SQL Server Management Studio (SSMS), selezionare Modalità SQLCMD dall'elenco a discesa Menu query nella parte superiore.
SSMS usa Microsoft .NET Framework SqlClient
per l'esecuzione in modalità NORMALE e SQLCMD in Editor di query. Se l'utilità sqlcmd viene eseguita dalla riga di comando, sqlcmd usa il driver ODBC. Poiché possono essere applicate diverse opzioni predefinite, è possibile che venga visualizzato un comportamento diverso quando si esegue la stessa query in SSMS in modalità SQLCMD e nell'utilità sqlcmd .
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 informazioni più approfondite sulla sintassi e sull'uso di sqlcmd, vedere sintassi sqlcmd ODBC.
Modifiche di rilievo da sqlcmd (ODBC)
Diverse opzioni e comportamenti vengono 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 potrebbe digitare la password per completare una connessione
- La variabile di ambiente
-r
richiede un argomento0
o1
L'opzione
-R
è rimossa.L'opzione
-I
è rimossa. Per disabilitare il comportamento dell'identificatore delimitato, aggiungereSET QUOTED IDENTIFIER OFF
negli script.-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 vengono forniti, sqlcmd negozia l'autenticazione con il server senza convalidare il certificato del server. - Se
-N
viene specificato ma-C
non lo è, sqlcmd richiede la convalida del certificato del server. Unfalse
valore per la crittografia potrebbe comunque portare alla crittografia del pacchetto di accesso. - Se vengono specificati sia
-N
che-C
, sqlcmd usa i relativi valori per la negoziazione della crittografia. - Altre informazioni sulla negoziazione della crittografia client/server sono disponibili in MS-TDS PRELOGIN.
- Se
-u
Nel file di output Unicode generato è scritto il simbolo UTF-16 Little-Endian Byte order mark (BOM).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 o virgolette per i comandi e non richiede righe successive. Questo comportamento è diverso dalla versione ODBC, che consente all'esecuzione della query diEXIT(query)
estendersi su più righe.
Connessione ions dell'utilità sqlcmd (Go) sono limitate alle connessioni TCP. Le named pipe non sono attualmente supportate nel 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 viene specificato, viene usata la sicurezza integrata o l'autenticazione di SQL Server, a seconda della presenza di un-U
parametro di nome utente.Il nuovo
--driver-logging-level
parametro della riga di comando consente di visualizzare tracce dalgo-mssqldb
driver. Usare64
per visualizzare tutte le tracce.sqlcmd può ora stampare i risultati usando un formato verticale. Usare la nuova
-F vertical
opzione della riga di comando per impostarla. LaSQLCMDFORMAT
variabile di scripting lo controlla anche.
Opzioni della riga di comando
Opzioni correlate all'accesso
-A
Accede a SQL Server con una connessione amministrativa dedicata. 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 l'applicazione livello dati non è disponibile, sqlcmd genera un messaggio di errore e quindi viene chiuso. Per altre informazioni sulle connessioni DAC, vedere Connessione di diagnostica per gli amministratori di database. L'opzione -A
non è supportata con l'opzione -G
. Quando ci si connette a database SQL di Azure usando -A
, è necessario essere un amministratore nel server SQL logico. L'applicazione livello dati non è disponibile per un amministratore di Microsoft Entra.
C-
Questa opzione viene utilizzata dal client per configurarla in modo da considerare attendibile in modo implicito il certificato del server senza 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 vengono forniti, sqlcmd negozia l'autenticazione con il server senza convalidare il certificato del server. - Se
-N
viene specificato ma-C
non lo è, sqlcmd richiede la convalida del certificato del server. Unfalse
valore per la crittografia potrebbe comunque portare alla crittografia del pacchetto di accesso. - Se vengono specificati sia
-N
che-C
, sqlcmd usa i relativi valori per la negoziazione della crittografia.
-d db_name
Genera un'istruzione USE <db_name>
all'avvio di sqlcmd. Questa opzione imposta la variabile SQLCMDDBNAME
di scripting 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 sqlcmd viene chiuso.
-D
Interpreta il nome del server fornito a -S
come DSN anziché come nome host. Per altre informazioni, vedere Supporto 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 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 SQLCMDLOGINTIMEOUT
di scripting sqlcmd . Il timeout predefinito per l'accesso a sqlcmd è di 8 secondi. Quando si usa l'opzione -G
per connettersi a database SQL di Azure o Azure Synapse Analytics ed eseguire l'autenticazione con Microsoft Entra ID, è consigliabile usare un valore di timeout di almeno 30 secondi. Il timeout dell'account di accesso deve essere un numero compreso tra 0
e 65534
. Se il valore fornito non è numerico o non rientra in tale intervallo, sqlcmd genera un messaggio di errore. Valore di 0
specifica che il timeout deve essere infinito.
-E
Usa una connessione trusted anziché un nome utente e una password per l'accesso a SQL Server. Per impostazione predefinita, senza -E
specificare, sqlcmd usa l'opzione di connessione attendibile.
L'opzione -E
ignora le possibili impostazioni delle variabili di ambiente nome utente e password, ad SQLCMDPASSWORD
esempio . Se l'opzione -E
viene usata insieme all'opzione -U
o all'opzione -P
, viene generato un messaggio di errore.
-g
Imposta l'impostazione Crittografia colonna 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 a database SQL di Azure o Azure Synapse Analytics per specificare che l'utente deve essere autenticato tramite l'autenticazione di Microsoft Entra. Questa opzione imposta la variabile SQLCMDUSEAAD = true
di scripting sqlcmd . L'opzione -G
richiede almeno sqlcmd versione 13.1. Per determinare la versione, eseguire sqlcmd -?
. Per altre informazioni, vedere Connessione per database SQL o Azure Synapse Analytics tramite 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 integrata di Microsoft Entra non è attualmente supportata in Linux o macOS. L'autenticazione integrata di Microsoft Entra richiede Microsoft ODBC Driver 17 per SQL Server versione 17.6.1 o successiva e un ambiente Kerberos configurato correttamente.
Per altre informazioni sull'autenticazione di Microsoft Entra, vedere Autenticazione di Microsoft Entra in sqlcmd.
-H workstation_name
Nome di una workstation. Questa opzione imposta la variabile SQLCMDWORKSTATION
di scripting sqlcmd . Il nome della workstation è elencato nella hostname
colonna della vista del sys.sysprocesses
catalogo e può essere restituito usando la stored procedure sp_who
. Se questa opzione non è specificata, il valore predefinito è il nome del computer corrente. È possibile usare questo nome per identificare sessioni di sqlcmd diverse.
-j
Stampa i messaggi di errore non elaborati sullo schermo.
-K application_intent
Dichiara il tipo di carico di lavoro dell'applicazione in caso di connessione a un server. L'unico valore attualmente supportato è ReadOnly
. Se -K
non è specificato, sqlcmd non supporta la connettività a una replica secondaria in un gruppo di disponibilità. Per altre informazioni, vedere Repliche secondarie attive: replica secondaria leggibile (gruppi di disponibilità AlwaysOn).
-M multisubnet_failover
Specificare -M
sempre quando ci si connette al listener del gruppo di disponibilità di un gruppo di disponibilità di SQL Server o di 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 -M
non è specificato, -M
è disattivato. 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à -N
sqlcmd (Go), ora accetta un valore stringa che può essere uno di true
, false
o disable
per specificare la scelta di crittografia. (default
equivale a omettere il parametro ):
- Se
-N
e-C
non vengono forniti, sqlcmd negozia l'autenticazione con il server senza convalidare il certificato del server. - Se
-N
viene specificato ma-C
non lo è, sqlcmd richiede la convalida del certificato del server. Unfalse
valore per la crittografia potrebbe comunque portare alla crittografia del pacchetto di accesso. - Se vengono specificati sia
-N
che-C
, sqlcmd usa i relativi valori per la negoziazione della crittografia.
-P password
Password specificata dall'utente. Per le password viene fatta distinzione tra maiuscole e minuscole. Se viene usata l'opzione -U
e l'opzione -P
non viene usata e la SQLCMDPASSWORD
variabile di ambiente non è stata impostata, sqlcmd richiede all'utente una password. Non è consigliabile usare una password null (vuota), ma è possibile specificare la password Null usando una coppia di virgolette doppie contigue per il valore del parametro (""
).
Importante
L'uso -P
deve essere considerato non sicuro. Evitare di assegnare la password nella riga di comando. In alternativa, usare la SQLCMDPASSWORD
variabile di ambiente 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 SQLCMDPASSWORD
variabile di ambiente consente di impostare una password predefinita per la sessione corrente. Pertanto, le password non devono essere hardcoded in file batch. Nell'esempio seguente viene prima impostata la SQLCMDPASSWORD
variabile 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 OSQLPASSWORD
variabile di ambiente è stata mantenuta per garantire la compatibilità con le versioni precedenti. La SQLCMDPASSWORD
variabile di ambiente ha la precedenza sulla OSQLPASSWORD
variabile di ambiente. È quindi possibile usare sqlcmd e osql insieme senza conflitti Gli script usati in precedenza continueranno a funzionare.
Se l'opzione -P
viene usata con l'opzione -E
, viene generato un messaggio di errore.
Se l'opzione -P
è seguita da più argomenti, 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 SQLCMDPASSWORD
variabile di ambiente.
-S [protocol:]server[\instance_name][,port]
Specifica l'istanza di SQL Server alla quale connettersi. Imposta la variabile SQLCMDSERVER
di scripting sqlcmd .
Specificare server_name per connettersi all'istanza predefinita di SQL Server nel computer server. Specificare server_name[\instance_name] per connettersi a un'istanza denominata di SQL Server in tale 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.
il protocollo può essere tcp
(TCP/IP), lpc
(memoria condivisa) o np
(named pipe).
Se non si specifica un server_name[\instance_name] quando si avvia sqlcmd, SQL Server verifica e usa la SQLCMDSERVER
variabile di ambiente.
Nota
La OSQLSERVER
variabile di ambiente è stata mantenuta per garantire la compatibilità con le versioni precedenti. La SQLCMDSERVER
variabile di ambiente ha la precedenza sulla OSQLSERVER
variabile di ambiente. È quindi possibile usare sqlcmd e osql insieme senza conflitti Gli script usati in precedenza continueranno a funzionare.
-U login_id
Nome utente del database indipendente o nome utente del database indipendente. Per gli utenti del database indipendente, è necessario specificare l'opzione nome database (-d
).
Nota
La OSQLUSER
variabile di ambiente è stata mantenuta per garantire la compatibilità con le versioni precedenti. La SQLCMDUSER
variabile di ambiente ha la precedenza sulla OSQLUSER
variabile di ambiente. È quindi possibile usare sqlcmd e osql insieme senza conflitti Gli script usati in precedenza continueranno a funzionare.
Se non si specifica l'opzione -U
o l'opzione -P
, sqlcmd tenta di connettersi usando la modalità di autenticazione di Windows. L'autenticazione si basa sull'account Windows dell'utente che esegue sqlcmd.
Se l'opzione -U
viene usata con l'opzione -E
(descritta più avanti in questo articolo), viene generato un messaggio di errore. Se l'opzione -U
è seguita da più argomenti, viene generato un messaggio di errore e il programma viene chiuso.
-z new_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 new_password
Modificare la password e uscire:
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 usa la tabella codici corrente sia per i file di input che per i file di output, a meno che il file di input non sia un file Unicode, nel qual caso non è necessaria alcuna conversione.
sqlcmd riconosce automaticamente file di input Unicode sia di tipo Big-Endian che di tipo Little-Endian. Se l'opzione
-u
è stata specificata, l'output è sempre Unicode little-endian.Se non viene specificato alcun file di output, la tabella codici di output è la 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 contiene un batch di istruzioni Transact-SQL o stored procedure. È possibile specificare più file letti ed elaborati in ordine. Non usare spazi tra nomi di file. sqlcmd controlla prima di tutto se tutti i file specificati esistono. Se uno o più file non esistono, sqlcmd viene chiuso. Le -i
opzioni e -Q
/-q
si escludono a vicenda.
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ù volte:
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 -u
viene specificato, il output_file viene archiviato in formato Unicode. Se il nome del file non è valido, viene generato un messaggio di errore e sqlcmd viene chiuso. sqlcmd non supporta la scrittura simultanea di più processi sqlcmd nello stesso file. L'output del file è danneggiato o non corretto. L'opzione -f
è rilevante anche per i formati di file. Questo file viene creato se non esiste. Un file con lo stesso nome di una sessione sqlcmd precedente viene sovrascritto. Il file specificato qui non è il stdout
file. Se si specifica un stdout
file, 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 del messaggio di errore alla schermata (stderr
). Se non si specifica un parametro o se si specifica 0
, vengono reindirizzati solo i messaggi di errore con un livello di gravità pari a 11 o superiore. Se si specifica 1
, viene reindirizzato tutto l'output del messaggio di errore incluso PRINT
. Questa opzione non ha alcun effetto se si usa -o
. Per impostazione predefinita, i messaggi vengono inviati a stdout
.
Nota
Per l'utilità -r
sqlcmd (Go), è necessario un 0
argomento o 1
.
-R
Si applica a: solo ODBC sqlcmd .
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) UTF-16.
Opzioni di esecuzione delle query
-e
Scrive script di input nel dispositivo di output standard (stdout
).
I-
Si applica a: solo ODBC sqlcmd .
Imposta l'opzione SET QUOTED_IDENTIFIER
di connessione su ON
. Per impostazione predefinita, è impostato su 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
gli script.
-q "query cmdline"
Esegue una query all'avvio di sqlcmd , ma non esce da 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 usare il GO
carattere di terminazione nella query.
Se -b
viene specificato insieme a questa opzione, sqlcmd viene chiuso in caso di errore. -b
è descritto altrove in questo articolo.
-Q "query cmdline"
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 usare il GO
carattere di terminazione nella query.
Se -b
viene specificato insieme a questa opzione, sqlcmd viene chiuso in caso di errore. -b
è descritto altrove in questo articolo.
-t query_timeout
Specifica il numero di secondi prima del timeout di un comando (o istruzione Transact-SQL). Questa opzione imposta la variabile SQLCMDSTATTIMEOUT
di scripting sqlcmd . Se non viene specificato un valore query_timeout , il comando non scade. Il query_timeout deve essere un numero compreso tra 1
e 65534
. Se il valore fornito non è numerico o non rientra in tale intervallo, sqlcmd genera un messaggio di errore.
Nota
Il valore di timeout effettivo può variare dal valore di query_timeout specificato per diversi secondi.
-v var = value [ var = value... ]
Crea una variabile di scripting sqlcmd che può essere usata in uno script sqlcmd . Se il valore contiene spazi, racchiuderlo tra virgolette. È possibile specificare più <var>="<value>"
valori. 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 INSERT
istruzioni che possono contenere stringhe con lo stesso formato delle variabili regolari, ad esempio $(<variable_name>)
.
Opzioni di formato
Intestazioni -h
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 SQLCMDHEADERS
di scripting sqlcmd . Utilizzare -1
per specificare che le intestazioni non devono essere stampate. Qualsiasi valore non valido fa sì che sqlcmd generi un messaggio di errore e quindi esci.
-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 col_separator
Specifica il carattere separatore di colonna. L'impostazione predefinita è uno spazio vuoto. Questa opzione imposta la variabile SQLCMDCOLSEP
di scripting sqlcmd . Per usare caratteri con un significato speciale per il sistema operativo, ad esempio l'e commerciale () o il punto e virgola (&
;
), racchiudere il carattere tra virgolette ("
). Il separatore di colonna può essere un carattere a 8 bit qualsiasi.
-w screen_width
Specifica la larghezza della schermata per l'output. Questa opzione imposta la variabile SQLCMDCOLWIDTH
di scripting sqlcmd . La larghezza della colonna deve essere un numero maggiore 8
di 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 insieme all'opzione durante la -s
preparazione dei dati da esportare in un'altra applicazione. Non è possibile usare con le -y
opzioni 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:
- ntext
- nvarchar(max)
- varbinary(max)
- xml
- tipi di dati definiti dall'utente
- Testo
- ntext
- Immagine
I tipi definiti dall'utente (UDT) possono essere a lunghezza fissa in base all'implementazione. Se questa lunghezza di un tipo definito dall'utente a lunghezza fissa è più breve che display_width, il valore del tipo definito dall'utente restituito non è interessato. Se invece la lunghezza è superiore a display_width, l'output viene troncato.
Attenzione
Usare l'opzione -y 0
con estrema cautela, perché può causare problemi significativi di prestazioni sia sul server che sulla 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 di segnalazione errori
-b
Specifica che sqlcmd esce e restituisce un DOS ERRORLEVEL
valore quando si verifica un errore. Il valore restituito alla ERRORLEVEL
variabile è 1
quando il messaggio di errore di SQL Server ha un livello di gravità maggiore di 10; in caso contrario, il valore restituito è 0
. Se l'opzione -V
è stata impostata oltre a -b
, sqlcmd non segnala un errore se il livello di gravità è inferiore ai valori impostati usando -V
. I file batch del prompt dei comandi possono testare il valore di ERRORLEVEL
e gestire l'errore in modo appropriato. sqlcmd non segnala errori per il livello di gravità 10 (messaggi informativi).
Se lo script sqlcmd contiene un commento non corretto, un errore di sintassi o manca una variabile di scripting, l'oggetto 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 i messaggi informativi. Gli spazi non sono consentiti tra -m
e -1
. Ad esempio, -m-1
è valido e -m -1
non lo è.
Questa opzione imposta anche la variabile SQLCMDERRORLEVEL
di scripting sqlcmd . Questa variabile ha un valore predefinito .0
-V error_severity_level
Controlla il livello di gravità utilizzato per impostare la ERRORLEVEL
variabile. Messaggi di errore con livelli di gravità maggiori o uguali a questo valore impostato ERRORLEVEL
. I valori minori di 0 vengono segnalati come 0
. I file Batch e CMD possono essere usati per testare il valore della ERRORLEVEL
variabile.
Opzioni varie
-a packet_size
Richiede un pacchetto di dimensione diversa. Questa opzione imposta la variabile SQLCMDPACKETSIZE
di scripting sqlcmd . packet_size deve essere un valore compreso tra 512
e 32767
. Il valore predefinito è 4096
. Una dimensione di pacchetto maggiore può migliorare le prestazioni per l'esecuzione di script con molte istruzioni Transact-SQL tra GO
i comandi. È 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 digitando la parola GO
su una riga stessa. Quando si reimposta il carattere di terminazione batch, non usare parole chiave riservate o caratteri Transact-SQL 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 usato 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 viene specificato il parametro c
facoltativo, l'output viene visualizzato senza la Servers:
riga di intestazione 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 1
facoltativo, il formato di output delle statistiche è in formato delimitato da due punti che può essere importato facilmente in un foglio di calcolo o elaborato da uno script.
Se il parametro facoltativo è un valore diverso da 1
, viene generato un errore e sqlcmd viene chiuso.
-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 viene specificato il parametro 1
facoltativo, sqlcmd genera un messaggio di errore e quindi viene chiuso. Se si specifica l'opzione -X
, vengono disabilitati i comandi seguenti:
ED
!!
command
Se si specifica l'opzione -X
, impedisce che le variabili di ambiente vengano passate a sqlcmd. Impedisce inoltre l'esecuzione dello script di avvio specificato usando la SQLCMDINI
variabile di scripting. Per altre informazioni sulle variabili di scripting sqlcmd , vedere sqlcmd - Usare con le variabili di scripting.
-?
Visualizza la versione di sqlcmd e il riepilogo della sintassi delle opzioni di sqlcmd .
Nota
In macOS eseguire sqlcmd '-?'
(con virgolette) invece.
Osservazioni:
Le opzioni non devono essere usate 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 <x> rows affected
messaggio non viene visualizzato quando non si applica all'istruzione eseguita.
Per usare sqlcmd in modo interattivo, digitare sqlcmd
al prompt dei comandi con una o più delle opzioni descritte in precedenza 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 sqlcmd nell'ambiente dei comandi (ad esempio cmd.exe
o bash
), inclusi tutti gli argomenti e le variabili espanse, è determinata dal sistema operativo sottostante.
Precedenza variabile (da bassa a alta)
- Variabili di ambiente a livello di sistema
- Variabili di ambiente a livello di utente.
- Shell dei comandi (
SET X=Y
) impostata al prompt dei comandi prima di eseguire sqlcmd sqlcmd -v X=Y
:Setvar X Y
Nota
Per visualizzare le variabili di ambiente, in Pannello di controllo aprire Sistema e quindi selezionare la scheda Avanzate.
Variabili di scripting sqlcmd
Variabile | Opzione correlata | L/S | Default |
---|---|---|---|
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 :Connect
viene usato .
R
indica che il valore può essere impostato una sola volta durante l'inizializzazione del programma.
R/W
indica che il valore può essere modificato usando il :setvar
comando e i comandi successivi sono influenzati dal nuovo valore.
sqlcmd - comandi
In aggiunta alle istruzioni Transact-SQL all'interno di sqlcmd, sono disponibili anche i comandi seguenti:
GO
[ count ]
: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
GO
di , devono essere preceduti da due punti (:
).Importante
Per mantenere la compatibilità con le versioni precedenti con gli script osql esistenti, alcuni dei comandi verranno riconosciuti 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 Non vengono inseriti nel buffer di esecuzione perché le istruzioni Transact-SQL sono.
Modifica dei comandi
[:] ED
Avvia l'editor di testo. Questo editor può essere utilizzato per modificare il batch Transact-SQL corrente o l'ultimo batch eseguito. Per modificare l'ultimo batch eseguito, il ED
comando deve essere digitato immediatamente dopo il completamento dell'esecuzione dell'ultimo batch.
L'editor di testo è definito dalla SQLCMDEDITOR
variabile di ambiente. L'editor predefinito è Edit
. Per modificare l'editor, impostare la SQLCMDEDITOR
variabile di ambiente. Ad esempio, per impostare l'editor su Blocco note di Microsoft, al prompt dei comandi digitare:
SET SQLCMDEDITOR=notepad
[:] RE edizione Standard T
Cancella la cache dell'istruzione.
Elenco:
Stampa il contenuto della cache dell'istruzione.
Variabili
:Setvar <var> [ "value" ]
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 laSQLCMDLOGINTIMEOUT
variabile sqlcmd .In modo esplicito usando il
:Setvar
comando .Mediante la definizione di una variabile di ambiente prima dell'esecuzione di sqlcmd.
Nota
L'opzione -X
impedisce che le variabili di ambiente vengano passate a sqlcmd.
Se una variabile definita tramite :Setvar
e una variabile di ambiente hanno lo stesso nome, la variabile definita tramite ha :Setvar
la precedenza.
I nomi delle variabili non devono contenere spazi vuoti.
I nomi delle variabili non possono avere la stessa forma di un'espressione di variabile, ad esempio $(var)
.
Se il valore stringa della variabile di scripting contiene spazi vuoti, racchiudere il valore tra virgolette. Se non viene specificato un valore per una variabile di scripting, 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 :Setvar
comando .
Comandi di output
:Error <filename> | STDERR | STDOUT
Reindirizzare tutto l'output degli errori al file specificato dal nome file, a o a stderr
stdout
. Il :Error
comando può essere visualizzato più volte in uno script. Per impostazione predefinita, l'output degli errori viene inviato a stderr
.
filename
Crea e apre un file che riceve l'output. Se il file esiste già, viene troncato a zero byte. Se il file non è disponibile a causa di autorizzazioni o altri motivi, l'output non viene modificato e viene inviato all'ultima destinazione specificata o predefinita.
STDERR
Passa l'output degli errori al
stderr
flusso. Se questo è stato reindirizzato, la destinazione a cui è stato reindirizzato il flusso riceve l'output degli errori.STDOUT
Passa l'output degli errori al
stdout
flusso. Se questo è stato reindirizzato, la destinazione a cui è stato reindirizzato il flusso riceve l'output degli errori.
:Out <filename> | STDERR | STDOUT
Crea e reindirizza tutti i risultati della query al file specificato dal nome file, a o a stderr
stdout
. Per impostazione predefinita, l'output viene inviato a stdout
. Se il file esiste già, viene troncato a zero byte. Il :Out
comando può essere visualizzato più volte in uno script.
nome file> :P erftrace <| STDERR | STDOUT
Crea e reindirizza tutte le informazioni di traccia delle prestazioni al file specificato dal nome file, a o a stdout
stderr
. Per impostazione predefinita, l'output della traccia delle prestazioni viene inviato a stdout
. Se il file esiste già, viene troncato a zero byte. Il :Perftrace
comando può essere visualizzato 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.
Quando viene usata l'opzione exit
, sqlcmd viene chiuso con il valore di errore appropriato.
Quando si usa l'opzione ignore
, sqlcmd ignora l'errore e continua l'esecuzione del batch o dello script. Per impostazione predefinita viene stampato un messaggio di errore.
[:]QUIT
Provoca la chiusura di sqlcmd .
[:] EXIT [ ( istruzione ) ]
Consente di usare il risultato di un'istruzione SELECT
come valore restituito da sqlcmd. Se numerica, la prima colonna dell'ultima riga di risultati viene convertita in un valore integer di 4 byte (long). MS-DOS, Linux e macOS passano il byte basso al livello di errore del processo padre o del sistema operativo. Windows 2000 e versioni successive passano l'intero intero a 4 byte. La sintassi è :EXIT(query)
.
Ad esempio:
:EXIT(SELECT @@ROWCOUNT)
È anche possibile includere il :EXIT
parametro come parte di un file batch. Al prompt dei comandi, ad esempio, digitare:
sqlcmd -Q ":EXIT(SELECT COUNT(*) FROM '%1')"
L'utilità sqlcmd invia tutti gli elementi tra parentesi (()
) al server. Se una stored procedure di sistema seleziona un set e restituisce un valore, viene restituita solo la selezione. L'istruzione :EXIT()
senza parentesi esegue tutti gli elementi prima del batch e quindi esce senza un valore restituito.
Quando viene specificata una query non corretta, sqlcmd viene chiuso senza un valore restituito.
Ecco un elenco di EXIT
formati:
:EXIT
Non esegue il batch e quindi chiude 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 RAISERROR
viene usato all'interno di uno script sqlcmd e viene generato lo stato 127, sqlcmd si chiude e restituisce l'ID del messaggio al client. Ad esempio:
RAISERROR(50001, 10, 127)
Questo errore causa la fine dello script sqlcmd e la restituzione dell'ID messaggio 50001 al client.
I valori -1
restituiti da -99
sono riservati da SQL Server e sqlcmd definisce i valori restituiti aggiuntivi seguenti:
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
segnala sia la fine di un batch che l'esecuzione di qualsiasi istruzione Transact-SQL memorizzata 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 <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 che non sono seguite da GO
, è necessario immettere GO
nella riga che segue :r
.
Il file verrà letto ed eseguito dopo che è stato rilevato un carattere di terminazione di batch. È possibile eseguire più :r
comandi. Il file può includere qualsiasi comando sqlcmd , incluso il terminatore GO
batch .
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.
:Connessione server_name[\instance_name] [-l timeout] [-U user_name [-P password]]
Stabilisce la connessione a un'istanza di SQL Server. e inoltre chiude la connessione corrente.
Opzioni di timeout:
Valore | Comportamento |
---|---|
0 |
Aspetta per sempre |
n>0 |
Attendere n secondi |
La SQLCMDSERVER
variabile di scripting riflette la connessione attiva corrente.
Se il timeout non viene specificato, il valore della SQLCMDLOGINTIMEOUT
variabile è l'impostazione predefinita.
Se viene specificato solo user_name (come opzione o come variabile di ambiente), all'utente viene richiesto di immettere una password. Agli utenti non viene richiesto se sono state impostate le SQLCMDUSER
variabili di ambiente o SQLCMDPASSWORD
. Se non si specificano opzioni o variabili di ambiente, per accedere viene usata la modalità di autenticazione di Windows. Ad esempio, per connettersi a un'istanza di , instance1
di SQL Server, myserver
, usando la sicurezza integrata, usare il comando seguente:
:connect myserver\instance1
Per connettersi all'istanza predefinita di usando le variabili di myserver
scripting, usare le impostazioni seguenti:
:setvar myusername test
:setvar myservername myserver
:connect $(myservername) $(myusername)
[:]!! command
Esegue i comandi del sistema operativo. Per eseguire un comando del sistema operativo, avviare una riga con due punti esclamativi (!!
) seguiti dal comando del sistema operativo. 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 sqlcmd , insieme a una breve descrizione di ogni comando.
nomi di file sqlcmd
I file di input sqlcmd possono essere specificati con l'opzione -i
o il :r
comando . I file di output possono essere specificati con l'opzione -o
o i :Error
comandi e :Out
:Perftrace
. Di seguito vengono illustrate alcune linee guida per l'utilizzo di tali file:
:Error
e:Out
: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 il file contiene un percorso di file di unità,
:Out c:\OutputFile.txt
ad esempio , il file di output viene creato nel computer locale e non nel server remoto.I percorsi di file validi includono
C:\<filename>
,\\<Server>\<Share$>\<filename>
e"C:\Some Folder\<file name>"
. Se nel percorso è presente uno spazio, usare le virgolette.Ogni nuova sessione sqlcmd sovrascrive 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 stampato il seguente messaggio informativo:
Changed database context to 'AdventureWorks2022'.
Formato di output dalle query Transact-SQL
sqlcmd stampa prima di tutto un'intestazione di colonna contenente i nomi delle colonne specificati nell'elenco di selezione. I nomi delle colonne sono separati usando il SQLCMDCOLSEP
carattere . 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.
Questa riga è seguita da una linea separatore che è una serie di caratteri 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. Questa larghezza può essere modificata usando l'opzione -w
o impostando la SQLCMDCOLWIDTH
variabile di scripting.
Formato di output XML
L'output XML risultante da una FOR XML
clausola è l'output, 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 vengono restituiti 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 GO
comando non deve essere visualizzato prima dell'esecuzione del :XML OFF
comando, perché il :XML OFF
comando restituisce sqlcmd all'output orientato alle righe.
Non è possibile combinare dati XML (di flusso) e dati del set di righe. Se il comando non è stato emesso prima dell'esecuzione :XML ON
di un'istruzione Transact-SQL che restituisce flussi XML, l'output viene confuso. Dopo aver eseguito il :XML ON
comando, non è possibile eseguire istruzioni Transact-SQL che generano set di righe regolari.
Nota
Il :XML
comando 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 include sia il nome della colonna che il testo JSON. Questo output non è json valido.
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 utilizzo dell'autenticazione di Microsoft Entra:
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30
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 output usando le autorizzazioni appropriate per il 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.
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 eventuali messaggi di livello di gravità 16. I messaggi di gravità 16 indicano errori generali che possono essere corretti dall'utente.Controllare il codice di uscita e
DOS ERRORLEVEL
la variabile dopo la chiusura del processo. sqlcmd restituisce0
normalmente, in caso contrario imposta comeERRORLEVEL
configurato da-V
. In altre parole,ERRORLEVEL
non dovrebbe essere previsto 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 è terminato e il relativo valore è influenzato specificando l'argomento-b
della riga di comando.
Usando -V16
in combinazione con il controllo del codice di uscita e DOS ERRORLEVEL
può aiutare a rilevare gli errori negli ambienti automatizzati, in particolare controlli di qualità prima di una versione di produzione.
Contenuto correlato
- Altre informazioni sulla nuova utilità go-sqlcmd su GitHub
- Guida introduttiva: Eseguire immagini del contenitore Linux di SQL Server con Docker
- sqlcmd - Avviare l'utilità
- sqlcmd - Eseguire file di script Transact-SQL
- sqlcmd : usare l'utilità
- sqlcmd - Usare con le variabili di scripting
- sqlcmd : Connessione al motore di database
- Modifica di script SQLCMD con l'editor di query
- Gestire passaggi di processo
- Creare un passaggio di processo CmdExec
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: nel corso del 2024 verranno dismessi i problemi di GitHub come meccanismo di feedback per il contenuto e verranno sostituiti con un nuovo sistema di feedback. Per altre informazioni, vedere:Invia e visualizza il feedback per