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:
- Alla riga di comando.
- In modalità SQLCMD nell'Editor di Query.
- In un file di script di Windows.
- In una fase del lavoro del sistema operativo (
cmd.exe
) di un processo di SQL Server Agent.
Nota
Anche se Microsoft Entra ID è il nuovo nome per Azure Active Directory (Azure AD), per evitare l'interruzione degli ambienti esistenti, la denominazione Azure AD è tuttora mantenuta in alcuni elementi hardcoded, ad esempio campi dell'interfaccia utente, provider di connessioni, codici errore e cmdlet. All’interno di questo articolo i due nomi vengono utilizzati in modo intercambiabile.
varianti di sqlcmd
Esistono due varianti di sqlcmd:
sqlcmd (Go): Il
go-mssqldb
sqlcmd basato, a volte stilizzato come go-sqlcmd. Questa versione è uno strumento autonomo che è possibile scaricare indipendentemente da SQL Server. Viene eseguito in Windows, macOS, Linux e nei contenitori.sqlcmd (ODBC): sqlcmd basato sulla piattaforma, basato su ODBC, disponibile con SQL Server o le utilità della riga di comando Microsoft e parte del
mssql-tools
pacchetto in Linux. Viene eseguito anche in Windows, macOS, Linux e nei contenitori.
Per scoprire quale variante e versione di sqlcmd è installata nel sistema, vedere Controllare la versione installata dell'utilità sqlcmd.
Per informazioni su come ottenere sqlcmd, vedere Scaricare e installare l'utilità sqlcmd.
Supporto TDS 8.0
SQL Server 2025 (17.x) Preview introduce il supporto TDS 8.0 per l'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 altre informazioni dettagliate sulla sintassi e sull'uso di sqlcmd, vedere Sintassi di sqlcmd ODBC.
Modifiche che causano un'interruzione da sqlcmd (ODBC)
Diversi comportamenti e opzioni sono modificati nell'utilità sqlcmd (Go). Per l'elenco più aggiornato dei flag mancanti per la 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. Per disabilitare il comportamento dell'identificatore delimitato, aggiungereSET QUOTED IDENTIFIER OFF
negli script.-N
accetta un valore stringa che può essere uno ditrue
,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.
Importante
In SQL Server 2025 (17.x) Preview può essere
-N
(per ),o
(peroptional
m
, impostazione predefinita) omandatory
(pers
).strict
Se non si include-N
,-Nm
(permandatory
) è l'impostazione predefinita. Si tratta di una modifica che causa un'interruzione rispetto a SQL Server 2022 (16.x) e alle versioni precedenti.- Se
-u
Nel file di output Unicode generato è scritto il carattere BOM (Byte Order Mark) UTF-16 Little-Endian.Alcuni comportamenti mantenuti per mantenere la compatibilità con
OSQL
potrebbero essere stati modificati, ad esempio l'allineamento delle intestazioni di colonna per alcuni tipi di dati.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. Le named pipe non sono attualmente supportate nel driver go-mssqldb
.
Miglioramenti
:Connect
ha un parametro facoltativo-G
per selezionare uno dei metodi di autenticazione per il database SQL di Azure -SqlAuthentication
,ActiveDirectoryDefault
ActiveDirectoryIntegrated
,ActiveDirectoryServicePrincipal
, .ActiveDirectoryManagedIdentity
ActiveDirectoryPassword
Per altre informazioni, vedere Eseguire l'autenticazione con MICROSOFT Entra ID in sqlcmd. 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
--driver-logging-level
parametro della riga di comando consente di visualizzare le tracce dalgo-mssqldb
driver. Usare64
per visualizzare tutte le tracce.sqlcmd (Go) può stampare i risultati usando un formato verticale. Usare l'opzione della
-F vertical
riga di comando per impostarla. Anche la variabile di scriptingSQLCMDFORMAT
lo controlla.Nota
Questa opzione è diversa dall'opzione
-F
per sqlcmd (ODBC), che viene usata con-N
per specificare il nome host nel certificato.
Opzioni della riga di comando
Nella tabella seguente sono elencate le opzioni della riga di comando disponibili in sqlcmd e i sistemi operativi supportati.
Opzioni relative al login
-Un
Si applica a: Solo Windows. Linux e macOS non sono supportati.
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 sull'applicazione livello dati, 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
Per informazioni su come stabilire una connessione amministrativa dedicata in macOS o Linux, vedere Linee guida per la programmazione.
-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 nome_db
Esegue un'istruzione USE <db_name>
all'avvio di sqlcmd. Questa opzione imposta la variabile di scripting sqlcmd. Questo parametro specifica il database iniziale. Il valore predefinito è la proprietà del database predefinito del tuo login. Se il database non esiste, viene generato un messaggio di errore e l'utilità sqlcmd viene chiusa.
-D
Interpreta il nome del server fornito a -S
come DSN anziché come nome host. Per maggiori informazioni, vedere il supporto DSN in sqlcmd e bcp.
Nota
L'opzione -D
è disponibile solo nei client Linux e MacOS. Nei client Windows si riferisce a un'opzione obsoleta che è stata rimossa e viene 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 di scripting sqlcmd. Il valore predefinito per il timeout di accesso a sqlcmd è otto secondi. Quando si usa l'opzione -G
per connettersi al database SQL di Azure o ad Azure Synapse Analytics ed eseguire l'autenticazione con Microsoft Entra ID, è consigliabile usare un valore di timeout di almeno 30 secondi. Il valore del timeout deve essere un numero compreso tra 0
e 65534
. Se il valore specificato non è numerico o non è compreso in tale intervallo, sqlcmd genera un messaggio di errore. Il valore 0
specifica un timeout infinito.
-E
Usa una connessione trusted anziché un nome utente e una password per l'accesso a SQL Server. 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
Per altre informazioni sulla creazione di connessioni attendibili che usano l'autenticazione integrata da un client Linux o macOS, vedere Uso dell'autenticazione integrata.
-g
Imposta la crittografia delle colonne su Enabled
. Per altre informazioni, vedere Always Encrypted. Sono supportate solo le chiavi master presenti nell'archivio certificati Windows. L'opzione -g
richiede almeno sqlcmd versione 13.1. Per determinare la versione, eseguire sqlcmd -?
.
-G
Questa opzione viene usata dal client per la connessione al database SQL di Azure o ad Azure Synapse Analytics per specificare che l'utente è autenticato con l'autenticazione di Microsoft Entra. 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 Autenticazione di Microsoft Entra per SQL di Azure. L'opzione -A
non è supportata con l'opzione -G
.
L'opzione -G
si applica solo al database SQL di Azure e ad Azure Synapse Analytics.
L'autenticazione interattiva di Microsoft Entra non è attualmente supportata in Linux o macOS. Per l'autenticazione integrata di Microsoft Entra è necessario scaricare ODBC Driver per SQL Server versione 17.6.1 o successiva e un ambiente Kerberos configurato correttamente.
Per altre informazioni sull'autenticazione di Microsoft Entra, vedere Eseguire l'autenticazione con Microsoft Entra ID in sqlcmd.
-H nome_postazione
Nome di una workstation. Questa opzione imposta la variabile di scripting sqlcmd. Il nome della workstation è riportato nella colonna hostname
della vista del catalogo sys.sysprocesses
e può essere ottenuto utilizzando la stored procedure sp_who
. Se questa opzione viene omessa, il valore predefinito è costituito dal nome del computer corrente. È possibile usare questo nome per identificare sessioni di sqlcmd diverse.
-j
Visualizza sullo schermo messaggi di errore non elaborati.
-K intento_applicazione
Dichiara il tipo di carico di lavoro dell'applicazione in caso di connessione a un server. L'unico valore attualmente supportato è ReadOnly
. Se l'opzione -K
non è specificata, sqlcmd non supporta la connettività a una replica secondaria in un gruppo di disponibilità. Per ulteriori informazioni, vedere Spostare il carico di lavoro di sola lettura su una replica secondaria di un gruppo di disponibilità Always On.
Nota
-K
non è supportato in SUSE Linux Enterprise Server (SLES). È tuttavia possibile specificare la ApplicationIntent=ReadOnly
parola chiave in un file DSN passato a sqlcmd. Per altre informazioni, vedere Supporto DSN in sqlcmd e bcp più avanti in questo articolo.
Per altre informazioni, vedere Disponibilità elevata e ripristino di emergenza in Linux e macOS.
-M multisubnet_failover
Specifica sempre -M
quando ti connetti al listener di un gruppo di disponibilità di SQL Server o a un'istanza di SQL Server del cluster di failover. Tramite -M
viene fornito un rilevamento più veloce di una connessione al server attualmente attivo. Se non si specifica -M
, significa che l'opzione -M
è disattivata.
Per altre informazioni, vedere:
- Connettersi a un listener del gruppo di disponibilità Always On
- Riferimento per la creazione e la configurazione di gruppi di disponibilità Always On
- Clustering di failover e Gruppi di disponibilità Always On (SQL Server)
- Scaricare il carico di lavoro di sola lettura su una replica secondaria di un gruppo di disponibilità Always On
Nota
-M
non è supportato in SUSE Linux Enterprise Server (SLES). È tuttavia possibile specificare la MultiSubnetFailover=Yes
parola chiave in un file DSN passato a sqlcmd. Per altre informazioni, vedere Supporto DSN in sqlcmd e bcp più avanti in questo articolo.
Per altre informazioni, vedere Disponibilità elevata e ripristino di emergenza in Linux e macOS.
-N
Questa opzione viene utilizzata dal client per richiedere una connessione crittografata.
Per l'utilità -N
(Go), 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)
Nota
In Linux e macOS [s|m|o]
sono stati aggiunti in sqlcmd 18.0.
-N
può essere o
(per optional
), m
(per mandatory
, impostazione predefinita) o s
(per strict
). In SQL Server 2025 (17.x) Preview, se non si include -N
, -Nm
(per mandatory
) è l'impostazione predefinita. Si tratta di una modifica che causa un'interruzione rispetto a SQL Server 2022 (16.x) e versioni precedenti, dove -No
è l'impostazione predefinita.
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.In sqlcmd (ODBC) usare
-F
per specificare il nome host nel certificato. Ad esempio:sqlcmd -S server01 -Q "SELECT TOP 100 * FROM WideWorldImporters.Sales.Orders" -A -Ns -F server01.adventure-works.com
Nota
Questa operazione è diversa dall'opzione
-F
per sqlcmd (Go), che viene usata per stampare i risultati usando un formato verticale.
-P password
Una password specificata dall'utente. Per le password viene fatta distinzione tra maiuscole e minuscole. Se viene usata l'opzione -U
, l'opzione -P
non viene usata e la SQLCMDPASSWORD
variabile di ambiente non è impostata, sqlcmd richiede all'utente una password. Non è consigliabile usare la password null (vuota), ma è possibile specificarla usando una coppia di virgolette doppie contigue per il valore del parametro (""
).
Importante
L'uso di -P
deve essere considerato non sicuro. Evitare di assegnare la password nella riga di comando. In alternativa, usare la variabile di ambiente SQLCMDPASSWORD
o immettere in modo interattivo la password omettendo l'opzione -P
.
È consigliabile usare una password complessa.
La richiesta della password viene visualizzata 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 digitare il comando seguente. 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
La OSQLPASSWORD
variabile di ambiente viene mantenuta per garantire la compatibilità con le versioni precedenti. La variabile di ambiente SQLCMDPASSWORD
ha la priorità rispetto alla variabile di ambiente OSQLPASSWORD
. È quindi possibile usare sqlcmd e osql insieme senza conflitti Gli script 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. È consigliabile eseguire l'escape dei caratteri speciali quando si usa -P
o usare invece la variabile di ambiente SQLCMDPASSWORD
.
In Linux e macOS, se usato con l'opzione -G
senza -U
, -P
specifica un file che contiene un token di accesso (v17.8+). Il file token dovrebbe essere in formato UTF-16LE (senza BOM).
I token di accesso possono essere ottenuti tramite vari metodi. È necessario assicurarsi che il token di accesso sia corretto per byte, perché viene inviato as-is. Di seguito è riportato un comando d'esempio che ottiene un token di accesso. Il comando utilizza l'Azure CLI e i comandi Linux e li salva in un file nel formato corretto. Se la codifica predefinita del sistema o del terminale non è ASCII o UTF-8, potrebbe essere necessario regolare le opzioni iconv
. Assicurati di proteggere attentamente il file risultante e di eliminarlo quando non è più necessario.
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. Imposta la scripting variabile sqlcmdSQLCMDSERVER
.
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
La OSQLSERVER
variabile di ambiente viene mantenuta per garantire la compatibilità con le versioni precedenti. La variabile di ambiente SQLCMDSERVER
ha la priorità rispetto alla variabile di ambiente OSQLSERVER
. È quindi possibile usare sqlcmd e osql insieme senza conflitti Gli script precedenti continuano a funzionare.
Il driver ODBC in Linux e macOS richiede -S
. L'unico valore di protocollo valido è 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
La OSQLUSER
variabile di ambiente viene mantenuta per garantire la compatibilità con le versioni precedenti. La variabile di ambiente SQLCMDUSER
ha la priorità rispetto alla variabile di ambiente OSQLUSER
. È quindi possibile usare sqlcmd e osql insieme senza conflitti Gli script 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.
Regole di conversione della tabella codici:
Se non viene specificata alcuna tabella codici, sqlcmd userà la tabella codici corrente per i file sia di input che di output, a meno che il file di input non sia un file Unicode per cui non è necessaria alcuna conversione.
sqlcmd riconosce automaticamente file di input Unicode sia di tipo Big-Endian che di tipo Little-Endian. Se si specifica l'opzione
-u
, l'output è sempre Unicode little-endian.Se non viene specificato alcun file di output, la tabella codici di output sarà costituita dalla tabella codici della console. Questo approccio consente la visualizzazione corretta dell'output nella console.
Se ci sono più file di input, si presume che appartengano alla stessa codifica. È possibile combinare file di input Unicode e non Unicode.
Immettere chcp
al prompt dei comandi per verificare la tabella codici di cmd.exe
.
Nota
In Linux, il numero della tabella codici è un valore numerico che specifica una tabella codici Linux installata (disponibile dalla versione 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.
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 si specifica -u
, file_output viene archiviato in formato Unicode. Se il nome file non è valido, viene generato un messaggio di errore e l'utilità sqlcmd viene chiusa.
sqlcmd non supporta la scrittura simultanea di più processi sqlcmd nello stesso file. L'output del file risulterà danneggiato o non corretto. L'opzione -f
è rilevante anche per i formati di file. Se il file non esiste, verrà creato. Un file con lo stesso nome di una sessione di sqlcmd precedente verrà sovrascritto. Il file specificato in questa posizione non corrisponde al file stdout
. Se si specifica un file stdout
, questo file non viene usato.
Percorsi di esempio:
-o C:< filename>
-o \\<Server>\<Share$>\<filename>
-o "C:\Some Folder\<file name>"
È necessario racchiudere tra virgolette i percorsi dei file contenenti spazi.
-r[0 | 1]
Reindirizza l'output dei messaggi di errore verso lo schermo (stderr
). Se il parametro viene omesso o si specifica 0
, vengono reindirizzati solo i messaggi di errore con livello di gravità 11 o superiore. Se si specifica 1
, viene reindirizzato l'output di tutti i messaggi di errore, incluso PRINT
. Questa opzione non ha alcun effetto se si usa -o
. Per impostazione predefinita, i messaggi sono inviati a stdout
.
Nota
Per l'utilità sqlcmd (Go), -r
richiede un argomento 0
o 1
.
-R
Si applica a: ODBC sqlcmd solo.
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
In Linux e macOS attualmente -R
viene en_US
usata solo la formattazione (inglese stati Uniti).
-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 viene scritto il contrassegno di ordine dei byte (BOM) UTF-16 little-endian.
Opzioni relative all'esecuzione di query
-e
Scrive gli script di input nel dispositivo di output standard (stdout
).
-Io
Si applica a: ODBC sqlcmd solo.
Imposta l'opzione di connessione SET QUOTED_IDENTIFIER
su ON
. L'impostazione predefinita è OFF
. Per altre informazioni, vedere SET QUOTED_IDENTIFIER.
Nota
Per disabilitare il comportamento dell'identificatore tra virgolette nell'utilità sqlcmd (Go), aggiungere SET QUOTED IDENTIFIER OFF
nei propri script.
-q "query cmdline"
Esegue una query all'avvio di sqlcmd , ma non esce da sqlcmd al termine della query. È possibile eseguire più query delimitate da punto e virgola. Racchiudere la query tra virgolette come illustrato nell'esempio seguente.
Al prompt dei comandi digitare:
sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
Importante
Non utilizzare il carattere di terminazione GO
nella query.
Se insieme a questa opzione si specifica -b
, l'utilità sqlcmd viene chiusa in caso di errore.
-b
è descritto 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 utilizzare il carattere di terminazione GO
nella query.
Se insieme a questa opzione si specifica -b
, l'utilità sqlcmd viene chiusa in caso di errore.
-b
è descritto altrove in questo articolo.
-t query_timeout
Specifica il numero di secondi prima del timeout di un comando (o un'istruzione Transact-SQL). Questa opzione imposta la variabile di scripting 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... ]
Si applica a: Solo Windows. Linux e macOS non sono supportati.
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 intestazioni
Specifica il numero di righe da stampare tra le intestazioni delle colonne. Per impostazione predefinita, le intestazioni vengono stampate una volta per ogni set di risultati delle query. Questa opzione imposta la variabile di scripting 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]
Rimuove tutti i caratteri di controllo, ad esempio i caratteri di tabulazione e nuova riga, dall'output. Questo parametro conserva la formattazione di colonna quando vengono restituiti i dati.
-
-k
rimuove i caratteri di controllo. -
-k1
sostituisce ogni carattere di controllo con uno spazio. -
-k2
sostituisce i caratteri di controllo consecutivi con uno spazio singolo.
-s separatore_col
Specifica il carattere separatore di colonna. L'impostazione predefinita è uno spazio vuoto. Questa opzione imposta la variabile di scripting sqlcmd. Per usare caratteri con un significato speciale per il sistema operativo, ad esempio il carattere e commerciale (&
) o il punto e virgola (;
), racchiudere il carattere tra le virgolette ("
). Il separatore di colonna può essere un carattere a 8 bit qualsiasi.
-w larghezza_schermo
Specifica la larghezza della schermata per l'output. Questa opzione imposta la variabile di scripting sqlcmd. La larghezza della colonna deve essere un numero maggiore di 8
e minore di 65536
. Se la larghezza della colonna specificata non rientra in tale intervallo, sqlcmd genera un messaggio di errore. La lunghezza predefinita è di 80 caratteri. Se una riga di output supera la larghezza di colonna specificata, viene continuata alla riga successiva.
-W
Questa opzione rimuove gli spazi finali da una colonna. Usare questa opzione in combinazione con l'opzione -s
quando si preparano i dati per l'esportazione in un'altra applicazione. Non è possibile usare questa opzione con -y
o -Y
.
-y variable_length_type_display_width
Imposta la variabile di scripting sqlcmd . Il valore predefinito è 256
. Limita il numero di caratteri restituiti per i tipi di dati a lunghezza variabile di grandi dimensioni:
- varchar(max)
- nvarchar(max)
- varbinary(max)
- XML
- Tipi di dati definiti dall'utente (UDT)
- testo
- ntext
- Immagine
I tipi definiti dall'utente (UDT) possono essere a lunghezza fissa in base all'implementazione. Se la lunghezza di un tipo definito dall'utente (UDT) a lunghezza fissa è inferiore a display_width, il valore del tipo definito dall'utente (UDT) restituito non viene alterato. Se invece la lunghezza è superiore a display_width, l'output viene troncato.
Attenzione
Usare l'opzione -y 0
con estrema cautela, perché può causare problemi di prestazioni significativi sia nel server che nella rete, a seconda delle dimensioni dei dati restituiti.
-Y larghezza_di_visualizzazione_del_tipo_a_lunghezza_fissa
Imposta la variabile di scripting sqlcmd . Il valore predefinito è 0
(illimitato). Limita il numero di caratteri restituiti per i tipi di dati seguenti:
- char(n), dove 1 <= n<= 8000
- nchar(n), dove 1 <= n<= 4000
- varchar(n), dove 1 <= n<= 8000
- nvarchar(n), dove 1 <= n<= 4000
- varbinary(n), dove 1 <= n<= 4000
- sql_variant
Opzioni relative alla segnalazione degli errori
-b
Specifica che in caso di errore l'utilità sqlcmd viene chiusa restituendo un valore DOS ERRORLEVEL
. Il valore restituito alla variabile ERRORLEVEL
è 1
se il messaggio di errore di SQL Server ha un livello di gravità maggiore di 10. In caso contrario, il valore restituito è 0
. Se l'opzione -V
è 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 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 livello_di_errore
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
. I messaggi di errore che hanno livelli di gravità maggiori o uguali a questo valore 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
Specifica il terminatore di batch. Per impostazione predefinita, i comandi vengono terminati e inviati a SQL Server tramite l'immissione della parola GO
su una riga a sé stante. Se il carattere di terminazione di batch viene reimpostato, non utilizzare parole chiave riservate Transact-SQL o caratteri con un significato speciale per il sistema operativo anche se sono preceduti da una barra rovesciata.
-L[c]
Si applica a: Solo Windows. Linux e macOS non sono supportati.
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. Di conseguenza, l'elenco dei server restituiti può variare per ogni chiamata di questa opzione.
Se si specifica il parametro facoltativo c
, l'output viene visualizzato senza la riga di intestazione Servers:
e ogni riga del server viene elencata senza spazi iniziali. Questa presentazione viene chiamata risultato pulito. L'output pulito consente di migliorare le prestazioni di elaborazione dei linguaggi di scripting.
-p[1]
Stampa le statistiche delle prestazioni per ogni set di risultati. Di seguito è riportato un esempio del formato delle statistiche delle prestazioni:
Network packet size (bytes): n
x xact[s]:
Clock Time (ms.): total t1 avg t2 (t3 xacts per sec.)
Dove:
-
x
= Numero di transazioni elaborate da SQL Server. -
t1
= tempo totale per tutte le transazioni. -
t2
= tempo medio per una singola transazione. -
t3
= numero medio di transazioni al secondo.
Tutti i valori relativi al tempo sono espressi in millisecondi.
Se si specifica il parametro facoltativo 1
, l'output delle statistiche è in formato separato da due punti. Questo formato può essere facilmente importato in un foglio di calcolo o elaborato da uno script.
Se il parametro facoltativo è un valore qualsiasi diverso da 1
, viene generato un messaggio di errore e l'utilità sqlcmd viene chiusa.
-X[1]
Disabilita i comandi che potrebbero pregiudicare la sicurezza del sistema quando si esegue sqlcmd da un file batch. I comandi disabilitati vengono comunque riconosciuti. sqlcmd genera un messaggio di avviso e continua l'esecuzione. Se si specifica il parametro facoltativo 1
, l'utilità sqlcmd genera un messaggio di errore e viene chiusa. Se si specifica l'opzione -X
, vengono disabilitati i comandi seguenti:
ED
-
!!
comando
Se si specifica l'opzione -X
, le variabili di ambiente non vengono passate a sqlcmd. Questa opzione impedisce inoltre che venga eseguito lo script di avvio specificato utilizzando la variabile di scripting SQLCMDINI
. Per altre informazioni sulle variabili di scripting di sqlcmd, vedere sqlcmd - Utilizzo con le variabili di scripting.
- ?
Visualizza la versione di sqlcmd e il riepilogo della sintassi delle opzioni di sqlcmd .
Nota
In macOS eseguire invece sqlcmd '-?'
(con virgolette).
Osservazioni:
Le opzioni non devono essere necessariamente utilizzate nell'ordine illustrato nella sezione della sintassi.
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 Usare 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.
Supporto DSN in sqlcmd e bcp
È possibile specificare un nome di origine dati (DSN) anziché un nome del server nell'opzione sqlcmd o bcp -S
nell'opzione (o sqlcmd :Connect
comando) se si specifica -D
.
-D
fa sì che sqlcmd o bcp si connetta al server specificato nel DSN dall'opzione -S
.
I DSN di sistema vengono archiviati nel odbc.ini
file nella directory ODBC SysConfigDir
(/etc/odbc.ini
nelle installazioni standard). I DSN utente vengono archiviati nella .odbc.ini
home directory di un utente (~/.odbc.ini
).
Nei sistemi Windows, i DSN di sistema e utente vengono archiviati nel Registro di sistema e gestiti tramite odbcad32.exe
.
bcp e sqlcmd non supportano DSN file.
Per l'elenco delle voci supportate dal driver, vedere DSN e Parole chiave e attributi delle stringhe di connessione .
In un DSN è necessaria solo la DRIVER
voce , ma per connettersi a un server remoto, sqlcmd o bcp richiede un valore nell'elemento SERVER
. Se l'elemento SERVER
è vuoto o non è presente nel DSN, sqlcmd e bcp tentano di connettersi all'istanza predefinita nel sistema locale.
Quando si usa bcp nei sistemi Windows, SQL Server 2017 (14.x) e versioni precedenti richiedono il driver SQL Native Client 11 (sqlncli11.dll
), mentre SQL Server 2019 (15.x) e versioni successive richiedono Microsoft ODBC Driver 17 per sql Server driver (msodbcsql17.dll
).
Se la stessa opzione viene specificata sia nel DSN che nella riga di comando sqlcmd o bcp , l'opzione della riga di comando sostituisce il valore usato nel DSN. Ad esempio, se il DSN ha una DATABASE
voce e la riga di comando sqlcmd include -d
, viene usato il valore passato a -d
. Se Trusted_Connection=yes
è specificato nel DSN, viene usata l'autenticazione Kerberos; il nome utente (-U
) e la password (-P
), se specificato, vengono ignorati.
Gli script esistenti che richiamano isql
possono essere modificati per usare sqlcmd definendo l'alias seguente: 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 ad un tempo maggiore di quello previsto per l'esecuzione del batch o della 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.Controllare il codice di uscita e
DOS ERRORLEVEL
la variabile dopo la chiusura del processo. 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
- Controllare la versione installata dell'utilità sqlcmd
- Scaricare e installare l'utilità sqlcmd
- Comandi nell'utilità sqlcmd
- Usare sqlcmd con variabili di scripting
- Avvio rapido: Eseguire immagini del contenitore di SQL Server in Linux con Docker
- Avviare l'utilità sqlcmd
- Eseguire T-SQL da un file di script con sqlcmd
- Usare sqlcmd
- Connettersi a SQL Server con sqlcmd
- Modifica script SQLCMD con il Gestore delle query
- Creare un passaggio di attività CmdExec