Connessione con sqlcmd
L'utilità sqlcmd è disponibile con Microsoft ODBC Driver for SQL Server su Linux e macOS.
I seguenti comandi indicano come usare l'autenticazione di Windows (Kerberos) e l'autenticazione di SQL Server, rispettivamente:
sqlcmd -E -Sxxx.xxx.xxx.xxx
sqlcmd -Sxxx.xxx.xxx.xxx -Uxxx -Pxxx
Opzioni disponibili
Le opzioni seguenti sono disponibili in sqlcmd su Linux e macOS:
-?
Visualizza l'utilizzo di sqlcmd
.
-a
Richiede la dimensione di un pacchetto.
-b
Termina il processo batch se viene rilevato un errore.
-c batch_terminator
Specifica il carattere di terminazione del batch.
-C
Considera attendibile il certificato del server.
-d database_name
Genera un'istruzione USE
nome_database quando si avvia sqlcmd
.
-D
Indica che il valore passato all'opzione -S di sqlcmd
deve essere interpretato come nome dell'origine dati (DSN). Per altre informazioni, vedere "Supporto di DSN in sqlcmd
e bcp
" alla fine di questo articolo.
-e
Scrive gli script di input nel dispositivo di output standard (stdout).
-E
Usa una connessione trusted (autenticazione integrata). Per altre informazioni sull'esecuzione di connessioni trusted che usano l'autenticazione integrata da un client Linux o macOS, vedere Uso dell'autenticazione integrata.
-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 Linux installata. (disponibile dalla versione 17.5.1.1)
-G
Questa opzione viene usata dal client durante la connessione al database SQL di Azure, all’istanza gestita di SQL di Azur o ad Azure Synapse Analytics per specificare che l'utente deve essere autenticato con Microsoft Entra ID (in precedenza, Azure Active Directory). Può essere combinato con solo l'opzione -P per usare l'autenticazione del token di accesso (v17.8+). Questa opzione imposta la variabile di scripting SQLCMDUSEAAD = true di sqlcmd . L'opzione -G
richiede almeno sqlcmd versione 17.6. Per determinare la versione, eseguire sqlcmd -?
.
Importante
L'opzione -G si applica solo al database SQL di Azure, all’istanza gestita di SQL di Azur e ad Azure Synapse Analytics.
L'autenticazione integrata di Microsoft Entra non è attualmente supportata in Linux o macOS. Per l'autenticazione integrata di Microsoft Entra sono necessari il driver Microsoft ODBC 17 per SQL Server versione 17.6.1 successiva e un ambiente Kerberos configurato correttamente.
-h numero_di_righe
Specifica il numero di righe da stampare tra le intestazioni delle colonne.
-H
Specifica il nome di una workstation.
-i file_input[,file_input[,...]]
Identifica il file che include un batch di istruzioni SQL o stored procedure.
-I
Imposta l'opzione di connessione SET QUOTED_IDENTIFIER
su ON.
-k
Rimuove o sostituisce i caratteri di controllo.
-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 l'opzione -K non è specificata, sqlcmd
non supporta la connettività a una replica secondaria in un gruppo di disponibilità Always On. Per altre informazioni, vedere Driver ODBC in Linux e macOS - Disponibilità elevata e ripristino di emergenza.
Nota
-K non è supportata in CTP per SUSE Linux. È tuttavia possibile specificare la parola chiave ApplicationIntent=ReadOnly in un file DSN passato a sqlcmd
. Per altre informazioni, vedere "Supporto di DSN in sqlcmd
e bcp
" alla fine di questo articolo.
-l timeout
Specifica il numero di secondi che devono trascorrere prima che si verifichi il timeout di un accesso a sqlcmd
quando si tenta la connessione a un server.
-m error_level
Controlla i messaggi di errore inviati a stdout.
-M multisubnet_failover
Specificare sempre -M in caso di connessione al listener di un gruppo di disponibilità di SQL Server 2012 (11.x) o a un'istanza del cluster di failover di SQL Server 2012 (11.x). -M consente un rilevamento più veloce dei failover e una connessione più rapida al server attualmente attivo. Se non si specifica -M, significa che l'opzione -M è disattivata. Per altre informazioni sui gruppi di disponibilità Always On, vedere Driver ODBC in Linux e macOS - Disponibilità elevata e ripristino di emergenza.
Nota
-M non è supportata in CTP per SUSE Linux. È tuttavia possibile specificare la parola chiave MultiSubnetFailover=Yes in un file DSN passato a sqlcmd
. Per altre informazioni, vedere "Supporto di DSN in sqlcmd
e bcp
" alla fine di questo articolo.
-N[s|m|o]
Imposta la modalità di crittografia della connessione su Strict, Mandatory o Optional, rispettivamente. Se l'opzione viene omessa, l'impostazione predefinita è Mandatory. ([s|m|o]
aggiunto in sqlcmd 18.0)
-o output_file
Identifica il file che riceve l'output da sqlcmd
.
-p
Stampa le statistiche delle prestazioni per ogni set di risultati.
-P
Specifica una password utente. Se usato con l'opzione -G senza -U, specifica un file che contiene un token di accesso (versione 17.8 e successive). Il file del token deve essere in formato UTF-16LE (senza BOM).
I token di accesso si possono ottenere in vari modi. È importante assicurarsi che il token di accesso sia corretto byte per byte, perché verrà inviato così com'è. Di seguito è riportato un comando di esempio che ottiene un token di accesso. Il comando usa i comandi dell'interfaccia della riga di comando di Azure e Linux e lo salva in un file nel formato corretto. Se la codifica predefinita del sistema o del terminale non è ASCII o UTF-8, potrebbe essere necessario modificare le opzioni iconv
. Assicurarsi di proteggere attentamente il file risultante ed 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
-q query_rigacomandi
Esegue una query all'avvio di sqlcmd
, ma non si chiude al termine dell'esecuzione della query.
-Q query_rigacomandi
Esegue una query all'avvio di sqlcmd
. sqlcmd
verrà chiuso al termine della query.
-r
Reindirizza i messaggi di errore a stderr.
-R
Imposta il driver ODBC in modo che utilizzi le impostazioni internazionali del client in caso di conversione dei dati relativi a valuta, data e ora in dati di tipo carattere. Attualmente viene usato solo il formato en_US (inglese Stati Uniti).
-s car_separatore_colonne
Specifica il carattere separatore di colonna.
-S [protocollo:] server[,porta]
Specifica l'istanza di SQL Server a cui connettersi oppure, se si usa -D, un DSN. Il driver ODBC in Linux e macOS richiede - S. L'unico valore di protocollo valido è tcp.
-t query_timeout
Specifica il numero di secondi prima del timeout del comando o dell'istruzione SQL.
-u
Specifica l'archiviazione di output_file in formato Unicode, indipendentemente dal formato di input_file.
-U
login_id Specifica un ID di accesso utente.
-V error_severity_level
Controlla il livello di gravità usato per impostare la variabile ERRORLEVEL.
-w column_width
Specifica la larghezza della schermata per l'output.
-W
Rimuove gli spazi finali da una colonna.
-x
Disabilita la sostituzione delle variabili.
-X
Disabilita i comandi, lo script di avvio e le variabili di ambiente.
-y variable_length_type_display_width
Consente di impostare la variabile di scripting sqlcmd
SQLCMDMAXFIXEDTYPEWIDTH
.
-Y fixed_length_type_display_width
Consente di impostare la variabile di scripting sqlcmd
SQLCMDMAXVARTYPEWIDTH
.
-z password
Modifica password.
-Z password
Consente di modificare la password e di uscire.
Comandi disponibili
Nella versione corrente, sono disponibili i comandi seguenti:
[:]!!
Interagisci:
Errore:
[:]EXIT
GO [conteggio]
Help (Guida):
Elenco:
:Listvar
:On Error
:Out
:Perftrace
[:]QUIT
:r
:RESET
:setvar
Opzioni non disponibili
Nella versione corrente non sono disponibili le opzioni seguenti:
-A
Stabilisce la connessione a SQL Server tramite una connessione amministrativa dedicata (DAC). Per informazioni su come effettuare una connessione amministrativa dedicata (DAC), vedere Linee guida per la programmazione.
-L
Elenca i computer server configurati localmente e i nomi dei computer server che trasmettono in rete.
-v
Crea una variabile di scripting di sqlcmd
che può essere usata in uno script sqlcmd
.
È possibile usare il seguente metodo alternativo: inserire i parametri all'interno di un file, che è quindi possibile aggiungere a un altro file. Questo metodo consentirà di usare un file di parametri per sostituire i valori. Creare ad esempio un file denominato a.sql
(file dei parametri) con il contenuto seguente:
:setvar ColumnName object_id
:setvar TableName sys.objects
Creare quindi un file denominato b.sql
con i parametri per la sostituzione:
SELECT $(ColumnName) FROM $(TableName)
Nella riga di comando, riunire a.sql
e b.sql
in c.sql
usando i comandi seguenti:
cat a.sql > c.sql
cat b.sql >> c.sql
Eseguire sqlcmd
e usare c.sql
come file di input:
sqlcmd -S<...> -P<..> -U<..> -I c.sql
Comandi non disponibili
Nella versione corrente non sono disponibili i comandi seguenti:
:ED
:ServerList
:XML
Supporto di DSN in sqlcmd e bcp
È possibile specificare un nome di origine dati (DSN) invece di un nome del server nell'opzione sqlcmd o bcp -S
(o comando sqlcmd :Connect) se si specifica -D
. Specificando -D
, sqlcmd o bcp si connette al server specificato nel DSN dall'opzione -S
.
I DSN di sistema vengono archiviati nel file odbc.ini
nella directory SysConfigDir ODBC (/etc/odbc.ini
nelle installazioni standard). I DSN utente vengono archiviati in .odbc.ini
nella 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. I DSN di file non sono supportati da bcp e sqlcmd.
Per l'elenco delle voci supportate dal driver, vedere Parole chiave e attributi per stringhe di connessione e DNS.
In un DSN, solo la voce DRIVER è obbligatoria, 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
proveranno a 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 il driver Microsoft ODBC Driver 17 for SQL Server (msodbcsql17.dll).
Se è specificata la stessa opzione sia nel DSN che nella riga di comando di sqlcmd
o di bcp
, l'opzione della riga di comando sostituisce il valore usato nel DSN. Se ad esempio il DSN include una voce DATABASE e la riga di comando di sqlcmd
include -d, viene usato il valore passato a -d. Se si specifica Trusted_Connection=yes nel DNS, viene usata l'autenticazione Kerberos e il nome utente (-U) e la password (-P), se specificati, vengono ignorati.
Gli script esistenti che richiamano isql
possono essere modificati per l'uso di sqlcmd
definendo l'alias seguente: alias isql="sqlcmd -D"
.