Utilità sqlcmd

L'utilità sqlcmd consente di immettere istruzioni Transact-SQL, procedure di sistema e file script al prompt dei comandi, nell'Editor di query in modalità SQLCMD, in un file script Windows o in un passaggio di processo del sistema operativo (Cmd.exe) in un processo di SQL Server Agent. e utilizza OLE DB per eseguire batch Transact-SQL.

Nota importanteImportante

SQL Server Management Studio utilizza Microsoft.NET FrameworkSqlClient per l'esecuzione in modalità regolare e SQLCMD nell'editor di query. In caso di esecuzione di sqlcmd dalla riga di comando, sqlcmd utilizza il provider OLE DB. Poiché possono essere applicate opzioni predefinite diverse, l'esecuzione della stessa query nella modalità SQLCMD di SQL Server Management Studio e nell'utilità sqlcmd potrebbe generare risultati diversi.

Sintassi

sqlcmd 
[{ { -U login_id [ -P password ] } | –E trusted connection }] 
[ -z new password ] [ -Z new password and exit]
[ -S server_name [ \ instance_name ] ] [ -H wksta_name ] [ -d db_name ]
[ -l login time_out ] [ -A dedicated admin connection] 
[ -i input_file ] [ -o output_file ]
[ -f < codepage > | i: < codepage > [ < , o: < codepage > ] ]
[ -u unicode output] [ -r [ 0 | 1 ] msgs to stderr ] 
[ -R use client regional settings]
[ -q "cmdline query" ] [ -Q "cmdline query" and exit] 
[ -e echo input ] [ -t query time_out ] 
[ -I enable Quoted Identifiers ] 
[ -v var = "value"...] [ -x disable variable substitution ]
[ -h headers ][ -s col_separator ] [ -w column_width ] 
[ -W remove trailing spaces ]
[ -k [ 1 | 2 ] remove[replace] control characters ] 
[ -y display_width ] [-Y display_width ]
[ -b on error batch abort] [ -V severitylevel ] [ -m error_level ] 
[ -a packet_size ][ -c cmd_end ] 
[ -L [ c ] list servers[clean output] ] 
[ -p [ 1 ] print statistics[colon format]] 
[ -X [ 1 ] ] disable commands, startup script, enviroment variables [and exit] 
[ -? show syntax summary]

Opzioni della riga di comando

  • Opzioni relative all'accesso

  • -Ulogin_id
    ID di accesso dell'utente.

    [!NOTA]

    La variabile di ambiente OSQLUSER è disponibile per motivi di compatibilità con le versioni precedenti. La variabile di ambiente SQLCMDUSER ha la precedenza rispetto alla variabile di ambiente OSQLUSER. È pertanto possibile utilizzare congiuntamente sqlcmd e osql senza conflitti e gli script osql esistenti continueranno a funzionare correttamente.

    Se si omettono le opzioni -U e -P, sqlcmd tenta di stabilire la connessione utilizzando la modalità di autenticazione di Microsoft Windows. L'autenticazione si basa sull'account di Windows dell'utente che esegue sqlcmd.

    Se si utilizza l'opzione -U in combinazione con l'opzione -E, descritta di seguito in questo argomento, verrà 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.

  • -Ppassword
    Password specificata dall'utente. Alle password viene applicata la distinzione tra maiuscole e minuscole. Se si utilizza l'opzione -U omettendo l'opzione -P e la variabile di ambiente SQLCMDPASSWORD non viene impostata, sqlcmd richiede all'utente di inserire una password. Se l'opzione -P viene specificata alla fine del prompt dei comandi senza indicare una password, sqlcmd utilizza la password predefinita (NULL).

    Nota sulla protezioneNota sulla protezione

    Non utilizzare una password vuota. Utilizzare una password complessa. Per ulteriori informazioni, vedere Password complesse.

    Il prompt della password viene visualizzato mediante la stampa nella console, come segue: Password:Password:

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

    La variabile di ambiente SQLCMDPASSWORD consente di impostare una password predefinita per la sessione corrente. Per tale motivo, non è necessario specificare le password a livello di codice in file batch.

    Nell'esempio seguente viene innanzitutto impostata la variabile SQLCMDPASSWORD al prompt dei comandi e quindi si accede all'utilità sqlcmd. Al prompt dei comandi digitare:

    SET SQLCMDPASSWORD= p@a$$w0rd

    Nota sulla protezioneNota sulla protezione

    La password risulterà visibile a chiunque si trovi davanti allo schermo del computer.

    Al prompt dei comandi successivo digitare:

    sqlcmd

    Se la combinazione di nome utente e password non è corretta, il provider OLE DB genera un messaggio di errore.

    [!NOTA]

    La variabile di ambiente OSQLPASSWORD è disponibile per motivi di compatibilità con le versioni precedenti. La variabile di ambiente SQLCMDPASSWORD ha la priorità rispetto alla variabile di ambiente OSQLPASSWORD, ovvero è possibile utilizzare congiuntamente sqlcmd e osql senza creare conflitti e gli script precedenti continueranno a funzionare correttamente.

    Se si utilizza l'opzione -P in combinazione con l'opzione -E, verrà 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.

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

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

  • -z new password
    Modifica la password:

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

  • -Z new password and exit
    Modifica la password e chiude l'utilità:

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

  • -Sserver_name [ **\**instance_name ]
    Specifica l'istanza di SQL Server alla quale connettersi. Imposta la variabile di scripting SQLCMDSERVER di sqlcmd.

    Per connettersi all'istanza predefinita di SQL Server di un determinato computer server, specificare server_name. Per connettersi a un'istanza denominata di SQL Server di un determinato computer server, specificare server_name [ **\**instance_name ]. Se non si specifica alcun server, sqlcmd si connette all'istanza predefinita di SQL Server del computer locale. Questa opzione è obbligatoria per l'esecuzione di sqlcmd da un computer remoto in rete.

    Se all'avvio di sqlcmd non si specifica server_name [ **\**instance_name ], SQL Server verifica la presenza della variabile di ambiente SQLCMDSERVER e quindi la utilizza.

    [!NOTA]

    La variabile di ambiente OSQLSERVER è disponibile per motivi di compatibilità con le versioni precedenti. La variabile di ambiente SQLCMDSERVER ha la priorità rispetto alla variabile di ambiente OSQLSERVER, ovvero è possibile utilizzare congiuntamente sqlcmd e osql senza creare conflitti e gli script precedenti continueranno a funzionare correttamente.

  • -Hwksta_name
    Nome della workstation. Questa opzione imposta la variabile di scripting SQLCMDWORKSTATION di sqlcmd. Il nome della workstation è riportato nella colonna hostname della vista del catalogo sys.processes oppure è possibile ottenerlo utilizzando la stored procedure sp_who. Se questa opzione viene omessa, il valore predefinito è costituito dal nome del computer corrente. È possibile utilizzare questo nome per identificare sessioni di sqlcmd diverse.

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

  • -llogintime_out
    Specifica il numero dei secondi che devono trascorrere prima che si verifichi il timeout di un accesso di sqlcmd al provider OLE DB quando si tenta la connessione a un server. Questa opzione imposta la variabile di scripting SQLCMDLOGINTIMEOUT di sqlcmd. Il valore predefinito per il timeout di accesso a sqlcmd è 8 secondi. Il timeout di accesso deve essere un numero compreso tra 0 e 65.534. Se il valore specificato non è numerico oppure non è compreso in tale intervallo, sqlcmd genera un messaggio di errore. Il valore 0 imposta un timeout infinito.

  • -A dedicated admin connection
    Stabilisce la connessione a SQL Server tramite una connessione amministrativa dedicata (DAC, Dedicated Administrator Connection). Questo tipo di connessione viene utilizzato per eseguire la risoluzione dei problemi a livello di server e funziona solo in computer server che supportano le connessioni DAC. Se la connessione DAC non è disponibile, l'utilità sqlcmd genera un messaggio di errore e viene chiusa. Per ulteriori informazioni sulle connessioni DAC, vedere Utilizzo di una connessione amministrativa dedicata.

  • Opzioni di input/output

  • -i input_file[***,***input_file2...]
    Identifica il file che include un batch di istruzioni SQL o stored procedure. È possibile specificare più file che verranno letti ed elaborati nell'ordine in cui sono stati specificati. Non inserire spazi tra i nomi di file. sqlcmdverificherà innanzitutto l'effettiva esistenza di tutti i file specificati. Se uno o più file non esistono, l'utilità sqlcmd viene chiusa. Le opzioni -i 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 utilizzata più volte: -i input_file -i I input_file.

  • -ooutput_file
    Identifica il file che riceve l'output di sqlcmd.

    Se si specifica -u, output_file viene archiviato in formato Unicode. Se un nome di 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. Per ulteriori informazioni sui formati di file, vedere l'opzione -f. 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 viene specificato un file stdout, questo file non verrà utilizzato.

    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.

  • -f < codepage > | i: < codepage > [ <, o: < codepage > ]
    Specifica le tabelle codici di input e output. Il numero specificato per codepage è un valore numerico che specifica una tabella codici di Windows installata. Per ulteriori informazioni, vedere Impostazioni delle regole di confronto durante l'installazione.

    Regole di conversione delle tabelle codici

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

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

    • Se non viene specificato alcun file di output, la tabella codici di output sarà costituita dalla tabella codici della console. Ciò 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.

    Digitare chcp al prompt dei comandi per verificare la tabella codici di Cmd.exe.

  • -u unicode output
    Specifica che output_file viene archiviato in formato Unicode, indipendentemente dal formato di input_file.

  • -r[ 0 | 1] msgs to stderr
    Reindirizza l'output dei messaggi sullo schermo (stderr). Se il parametro viene omesso o si specifica 0, vengono reindirizzati solo i messaggi di errore con livello di gravità 11 o superiore. Se si specifica 1, viene reindirizzato l'output di tutti i messaggi di errore che includono PRINT. Non produce alcun effetto se si utilizza -o. Per impostazione predefinita, i messaggi vengono inviati in stdout.

  • -R use client regional settings
    Imposta il provider OLE DB di SQL Server in modo che utilizzi le impostazioni internazionali del client in caso di conversione dei dati relativi a valuta e data e ora in dati di tipo carattere. Per impostazione predefinita vengono utilizzate le impostazioni internazionali del server.

  • Opzioni relative all'esecuzione di query

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

    Al prompt dei comandi digitare:

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

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

    Nota importanteImportante

    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. L'opzione -b è descritta di seguito in questo argomento.

  • **-Q"**cmdline query " and exit
    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 AdventureWorks -Q "SELECT FirstName, LastName FROM Person.Contact WHERE LastName LIKE 'Whi%';"

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

    Nota importanteImportante

    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. L'opzione -b è descritta di seguito in questo argomento.

  • -e echo input
    Scrive gli script di input nel dispositivo di output standard (stdout).

  • -I enable Quoted Identifiers
    Imposta l'opzione di connessione SET QUOTED_IDENTIFIER su ON. Per impostazione predefinita, l'opzione è impostata su OFF. Per ulteriori informazioni, vedere SET QUOTED_IDENTIFIER (Transact-SQL).

  • -tquerytime_out
    Specifica il numero di secondi prima del timeout del comando o dell'istruzione SQL. Questa opzione imposta la variabile di scripting SQLCMDSTATTIMEOUT di sqlcmd. Se per time_out non viene specificato un valore, il comando non sarà associato ad alcun timeout. Il valore specificato per querytime_out deve essere un numero compreso tra 1 e 65535. Se il valore specificato non è numerico oppure non è compreso in tale intervallo, sqlcmd genera un messaggio di errore.

    [!NOTA]

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

  • -vvar*=value[ var=*value...]
    Crea una variabile di scripting di sqlcmdche può essere utilizzata in uno script sqlcmd. Se il valore contiene spazi, racchiuderlo tra virgolette. È possibile specificare più valori var="values". 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"

  • -x disable variable substitution
    Fa in modo che sqlcmd ignori le variabili di scripting. Ciò risulta utile quando uno script contiene numerose istruzioni INSERT che possono includere stringhe con lo stesso formato di normali variabili, ad esempio $(variable_name).

  • Opzioni di formattazione

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

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

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

  • -W remove trailing spaces
    Questa opzione rimuove gli spazi finali da una colonna. Utilizzare questa opzione in combinazione con l'opzione -s per preparare i dati per l'esportazione in un'altra applicazione. Non è tuttavia possibile utilizzarla insieme all'opzione -y o -Y.

  • -k[ 1 | 2 ] remove[replace] control characters
    Rimuove tutti i caratteri di controllo, ad esempio i caratteri di tabulazione e nuova riga, dall'output. In questo modo viene conservata la formattazione di colonna quando vengono restituiti i dati. Se si specifica 1, i caratteri di controllo vengono sostituiti da un singolo spazio. Se si specifica 2, i caratteri di controllo consecutivi vengono sostituiti da un singolo spazio.

  • -ydisplay_width
    Imposta la variabile di scripting SQLCMDMAXFIXEDTYPEWIDTH di sqlcmd. Il valore predefinito è 0 (non impostata). Limita il numero di caratteri restituiti per i tipi di dati a lunghezza variabile di grandi dimensioni:

    • varchar(max)

    • nvarchar(max)

    • varbinary(max)

    • xml

    • UDT (tipi di dati definiti dall'utente)

    • text

    • ntext

    • image

    [!NOTA]

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

    Se display_width è 0, l'output viene troncato in corrispondenza di 1 MB. Per impedire il troncamento dell'output, è possibile utilizzare il comando :XML ON, descritto di seguito in questo argomento.

    Nota importanteImportante

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

  • -Ydisplay_width
    Imposta la variabile di scripting SQLCMDMAXVARTYPEWIDTH di sqlcmd. Il valore predefinito è 256. Limita il numero di caratteri restituiti per i tipi di dati seguenti:

    • char

    • nchar

    • varchar(n), dove 1<n<8000

    • nvarchar(n), dove 1<n<4000

    • sql_variant

  • Opzioni relative alla segnalazione degli errori

  • -b on error batch abort
    Specifica che, in caso di errore, l'utilità sqlcmd venga chiusa e restituisca un valore DOS ERRORLEVEL. Il valore restituito alla variabile DOS ERRORLEVEL è 1 se il messaggio di errore di SQL Server ha un livello di gravità maggiore di 10. In caso contrario, il valore restituito è 0. Se è stata impostata l'opzione -V in combinazione con -b, sqlcmd non segnalerà l'errore se il livello di gravità è minore dei valori impostati tramite -V. Nei file batch del prompt dei comandi è possibile verificare il valore di ERRORLEVEL e gestire l'errore in modo appropriato. sqlcmd non segnala gli errori se il livello di gravità impostato è 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.

  • -V severitylevel
    Controlla il livello di gravità utilizzato per impostare la variabile ERRORLEVEL. I messaggi di errore associati a livelli di gravità minori o uguali a questo valore comportano l'impostazione della variabile ERRORLEVEL. I valori minori di 0 vengono indicati come 0. È possibile utilizzare file batch e CMD per verificare il valore della variabile ERRORLEVEL.

  • -merror_level
    Determina i messaggi di errore inviati a stdout. I messaggi associati a un livello di gravità minore o uguale a questo livello vengono inviati. Quando questo valore è impostato su -1, vengono inviati tutti i messaggi, inclusi i messaggi informativi. Non è consentita l'aggiunta di spazi tra -m e -1. -m-1, ad esempio, è valido, mentre -m-1 non è valido.

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

  • Opzioni varie

  • -apacket_size
    Richiede un pacchetto di dimensione diversa. Questa opzione imposta la variabile di scripting SQLCMDPACKETSIZE di sqlcmd. Il valore di packet_size deve essere compreso tra 512 e 32767. Il valore predefinito è 4096. Un pacchetto di dimensioni maggiori può migliorare le prestazioni dell'esecuzione di script contenenti numerose istruzioni SQL tra i comandi GO. È possibile richiedere dimensioni di pacchetto superiori. Se tale richiesta viene negata, tuttavia, sqlcmd utilizza le dimensioni di pacchetto predefinite del server.

  • -ccmd_end
    Specifica il carattere di terminazione dei 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 dei 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 ] list servers[clean output]
    Elenca i computer server configurati localmente e i nomi dei computer server che trasmettono in rete tramite broadcast. Questo parametro non può essere utilizzato in combinazione con altri parametri. Il numero massimo di computer server che possono essere elencati è 3.000. Se l'elenco di server viene troncato a causa delle dimensioni del buffer, viene visualizzato un messaggio di avviso.

    [!NOTA]

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

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

  • -p[ 1 ] print statistics[colon format]
    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 ] disable commands, startup script, enviroment variables [and exit]
    Disattiva i comandi che potrebbero pregiudicare la sicurezza del sistema quando sqlcmd viene eseguito da un file batch. I comandi disattivati 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 disattivati i comandi seguenti:

    • ED

    • **!!**command

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

  • -? show syntax summary
    Visualizza il riepilogo della sintassi delle opzioni di sqlcmd.

Osservazioni

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

Se vengono restituiti più risultati, sqlcmd stampa una riga vuota tra ogni set di risultati in un batch. Inoltre, il messaggio "Righe interessate: <x>" non viene visualizzato se non è riferibile all'istruzione eseguita.

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

[!NOTA]

Le opzioni -L, -Q, -Z o -i determinano la chiusura di sqlcmd al termine dell'esecuzione.

La lunghezza totale della riga di comando di sqlcmd nell'ambiente di comando (Cmd.exe), includendo tutti gli argomenti e le variabili espanse, corrisponde alla lunghezza determinata dal sistema operativo per Cmd.exe.

Precedenza delle variabili (in ordine crescente)

  1. Variabili di ambiente a livello di sistema.

  2. Variabili di ambiente a livello di utente.

  3. Impostazione della shell dei comandi (SET X=Y) al prompt dei comandi prima dell'esecuzione di sqlcmd.

  4. sqlcmd-v X=Y

  5. :Setvar X Y

[!NOTA]

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

Variabili di scripting di sqlcmd

Variabile

Opzione correlata

L/S

Predefinito

SQLCMDUSER

-U

L

""

SQLCMDPASSWORD

-P

--

""

SQLCMDSERVER

-S

L

"DefaultLocalInstance"

SQLCMDWORKSTATION

-H

L

"ComputerName"

SQLCMDDBNAME

-d

L

""

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

L

"4096"

SQLCMDERRORLEVEL

-m

L/S

0

SQLCMDMAXVARTYPEWIDTH

-y

L/S

"256"

SQLCMDMAXFIXEDTYPEWIDTH

-Y

L/S

"0" = numero illimitato

SQLCMDEDITOR

L/S

"edit.com"

SQLCMDINI

L

""

Le variabili SQLCMDUSER, SQLCMDPASSWORD e SQLCMDSERVER vengono impostate quando viene utilizzato il comando :Connect.

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

L/S indica che è possibile modificare il valore tramite il comando setvar e che il nuovo valore influirà sui comandi successivi.

Comandi sqlcmd

In aggiunta alle istruzioni Transact-SQL all'interno di sqlcmd, sono inoltre disponibili 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 utilizzano comandi sqlcmd, tenere presente quanto segue:

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

    Nota importanteImportante

    Per garantire la compatibilità con le versioni precedenti per gli script osql esistenti, alcuni comandi verranno riconosciuti anche senza i due punti. Questa caratteristica è indicata da [:].

  • I comandi sqlcmd vengono riconosciuti solo se si trovano all'inizio di una riga.

  • Tutti i comandi sqlcmd non fanno distinzione tra maiuscole e minuscole.

  • Ogni comando deve trovarsi in una riga distinta. Un comando non può essere seguito da un'istruzione Transact-SQL o da un altro comando.

  • I comandi vengono eseguiti immediatamente e non vengono inseriti nel buffer di esecuzione come le istruzioni Transact-SQL.

  • Comandi di modifica

  • [:] ED
    Avvia l'editor di testo. Questo editor può essere utilizzato per modificare il batch Transact-SQL corrente o l'ultimo batch eseguito. Per modificare l'ultimo batch eseguito, il comando ED deve essere specificato subito dopo il completamento dell'esecuzione dell'ultimo batch.

    L'editor di testo viene definito dalla variabile di ambiente SQLCMDEDITOR. L'editor predefinito è "Edit". Per modificare l'editor, impostare la variabile di ambiente SQLCMDEDITOR. Ad esempio, per impostare l'editor su Blocco note di Microsoft, al prompt dei comandi digitare:

    SET SQLCMDEDITOR=notepad

  • [:] RESET
    Cancella la cache dell'istruzione.

  • :List
    Stampa il contenuto della cache dell'istruzione.

  • Variabili

  • :Setvar <var> [ "value" ]
    Definisce le variabili di scripting sqlcmd. Le variabili di scripting dispongono del seguente formato: $(VARNAME). $(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. Con l'opzione -l, ad esempio, viene impostata la variabile SQLCMDLOGINTIMEOUT di sqlcmd.

    • In modo esplicito utilizzando il comando :Setvar.

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

    [!NOTA]

    L'opzione -X impedisce la trasmissione delle variabili di ambiente a sqlcmd.

    Se una variabile definita mediante il comando :Setvar e una variabile di ambiente dispongono dello stesso nome, la variabile definita con :Setvar ha la precedenza.

    I nomi delle variabili non devono contenere spazi vuoti.

    I nomi delle variabili non possono disporre dello stesso formato delle espressioni con variabili, ad esempio $(var).

    Se il valore stringa della variabile di scripting contiene spazi vuoti, racchiudere il valore tra virgolette. Se per una variabile di scripting non viene specificato alcun valore, la variabile di scripting viene eliminata.

  • :Listvar
    Visualizza l'elenco delle variabili di scripting impostate.

    [!NOTA]

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

  • Comandi di output

  • :Error **<filename>|STDERR|STDOUT
    Reindirizza tutti gli output degli errori nel file specificato da file name, in stderr oppure in stdout. Il comando Error può essere utilizzato più volte in uno script. Per impostazione predefinita, l'output degli errori viene inviato in stderr.

    • file name
      Crea e apre un file che riceverà l'output. Se il file esiste già, esso verrà troncato a zero byte. Se il file non è disponibile a causa delle autorizzazioni o per altri motivi, l'output non verrà trasferito e verrà inviato all'ultima destinazione specificata oppure alla destinazione predefinita.

    • STDERR
      Trasferisce l'output dell'errore al flusso stderr. Se l'output è stato reindirizzato, la destinazione alla quale il flusso è stato reindirizzato riceverà l'output dell'errore.

    • STDOUT
      Trasferisce l'output dell'errore al flusso stdout. Se l'output è stato reindirizzato, la destinazione alla quale il flusso è stato reindirizzato riceverà l'output dell'errore.

  • :Out <filename>| STDERR| STDOUT
    Crea e reindirizza tutti i risultati delle query nel file specificato da file name, in stderr oppure in stdout. Per impostazione predefinita, l'output viene inviato in stdout. Se il file esiste già, verrà troncato a zero byte. Il comando Out può essere utilizzato più volte in uno script.

  • :Perftrace <filename>| STDERR| STDOUT
    Crea e reindirizza tutte le informazioni di traccia delle prestazioni nel file specificato da file name, in stderr oppure in stdout. Per impostazione predefinita, l'output della traccia delle prestazioni viene inviato in stdout. Se il file esiste già, verrà troncato a zero byte. Il comando Perftrace può essere utilizzato più volte in uno script.

  • Comandi di controllo dell'esecuzione

  • :On Error[ exit| ignore]
    Imposta l'azione da eseguire quando si verifica un errore durante l'esecuzione dello script o del batch.

    Se si specifica l'opzione exit, l'utilità sqlcmd viene chiusa con il valore di errore appropriato.

    Se viene utilizzata l'opzione ignore, sqlcmd ignora l'errore e continua l'esecuzione del batch o dello script. Per impostazione predefinita, verrà stampato un messaggio di errore.

  • [:] QUIT
    Provoca la chiusura di sqlcmd.

  • [:] EXIT[ (statement) ]
    Consente di utilizzare il risultato di un'istruzione SELECT come valore restituito da sqlcmd. La prima colonna della prima riga di risultati viene convertita in un valore integer di 4 byte (long). MS-DOS passa il byte di ordine inferiore al processo padre o al livello di errore del sistema operativo. Windows 200x passa l'intero valore integer di 4 byte. La sintassi è:

    :EXIT(query)

    Ad esempio:

    :EXIT(SELECT @@ROWCOUNT)

    È inoltre possibile includere il parametro EXIT in un file batch. Ad esempio, al prompt dei comandi digitare:

    sqlcmd -Q "EXIT(SELECT COUNT(*) FROM '%1')"

    L'utilità sqlcmd invia i dati tra parentesi () al server. Se una stored procedure di sistema seleziona un set e restituisce un valore, viene restituita solo la selezione. Se non si specifica alcun elemento tra le parentesi dell'istruzione EXIT**()**, viene eseguito tutto ciò che la precede nel batch e l'operazione viene quindi terminata senza restituire alcun valore.

    Se si specifica una query non corretta, l'utilità sqlcmd viene chiusa senza restituire alcun valore.

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

    • :EXIT

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

    • :EXIT( )

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

    • :EXIT(query)

    L'utilità esegue il batch in cui è inclusa la query e quindi viene chiusa dopo aver restituito i risultati della query.

    Se in uno script sqlcmd si utilizza RAISERROR e si verifica una condizione con stato 127, l'utilità sqlcmd viene chiusa e restituisce al client l'ID di messaggio. Ad esempio:

    RAISERROR(50001, 10, 127)

    Questo errore comporta la chiusura di sqlcmd e la restituzione dell'ID di messaggio 50001 al client.

    I valori restituiti compresi tra -1 e -99 sono riservati a SQL Server. L'utilità sqlcmd definisce i valori restituiti aggiuntivi elencati di seguito.

    Valore restituito

    Descrizione

    -100

    Si è verificato un errore prima di selezionare il valore restituito.

    -101

    Selezionando il valore restituito non si sono trovate righe.

    -102

    Si è verificato un errore di conversione durante la selezione del valore restituito.

  • GO [count]
    GO indica sia la fine di un batch che l'esecuzione di eventuali istruzioni Transact-SQL memorizzate nella cache. Se si specifica un valore per count, le istruzioni memorizzate nella cache verranno eseguite come batch singolo il numero di volte specificato da count.

  • Comandi vari

  • :r<filename>
    Analizza le istruzioni Transact-SQL e i comandi sqlcmd aggiuntivi dal file specificato da <filename> nella cache delle istruzioni.

    Se il file contiene istruzioni Transact-SQL non seguite da GO,è necessario immettere GO nella riga successiva a :r.

    [!NOTA]

    <filename> viene letto in relazione alla directory di avvio in cui sqlcmd è stato eseguito.

    Il file verrà letto ed eseguito dopo che è stato rilevato un carattere di terminazione del batch. È possibile eseguire più comandi :r. Il file può contenere qualsiasi comando sqlcmd, incluso il carattere di terminazione dei batch GO.

    [!NOTA]

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

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

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

    0

    attesa infinita

    n>0

    attesa di n secondi

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

    Se timeout viene omesso, il valore predefinito corrisponde al valore della variabile SQLCMDLOGINTIMEOUT.

    Se si specifica solo user_name sotto forma di opzione o variabile di ambiente, all'utente verrà richiesto di specificare una password. Ciò non si verifica se è stata impostata la variabile di ambiente SQLCMDUSER o SQLCMDPASSWORD. Se non si specificano opzioni o variabili di ambiente, per la connessione verrà utilizzata la modalità di autenticazione di Windows. Per connettersi all'istanza instance1 di SQL Servermyserver utilizzando la protezione integrata, ad esempio, specificare:

    :connect myserver\instance1

    Per connettersi all'istanza predefinita di myserver utilizzando le variabili di scripting, specificare:

    :setvar myusername test

    :setvar myservername myserver

    :connect $(myservername) $(myusername)

  • [:] !!< command>
    Esegue i comandi del sistema operativo. Per eseguire un comando del sistema operativo, digitare due punti esclamativi all'inizio della riga (!!) e quindi specificare il comando del sistema operativo desiderato. Ad esempio:

    :!! Dir

    [!NOTA]

    Il comando viene eseguito nel computer in cui è in esecuzione sqlcmd.

  • :XML [ON | OFF]
    Per ulteriori informazioni, vedere "Formato di output XML" di seguito in questo argomento.

  • :Help
    Elenca i comandi sqlcmd con una breve descrizione di ogni comando.

Nomi di file per sqlcmd

È possibile specificare i file di input di sqlcmd con l'opzione -i o il comando :r. I file di output possono essere specificati con l'opzione -o oppure con i comandi :Error, :Out e :Perftrace . Di seguito vengono illustrate alcune linee guida per l'utilizzo di tali file:

  • È consigliabile utilizzare valori <filename> distinti in :Error, :Out e :Perftrace . Se viene utilizzato lo stesso valore <filename>, è possibile che gli input di tali comandi vengano confusi.

  • Se un file di input che risiede in un server remoto viene chiamato da sqlcmd in un computer locale e contiene un percorso di file con unità come :out c:\OutputFile.txt, il file di output verrà creato nel computer locale e non nel server remoto.

  • I percorsi di file validi includono C:\<filename>,\\<Server>\<Condivisione$>\<filename> e "C:\Cartella\<file name>". Se il percorso contiene uno spazio, utilizzare le virgolette.

  • Ogni nuova sessione di sqlcmd sovrascriverà i file esistenti con gli stessi nomi.

Messaggi informativi

sqlcmd stampa qualsiasi messaggio informativo inviato dal server. Nell'esempio seguente al termine dell'esecuzione delle istruzioni Transact-SQL viene stampato un messaggio informativo.

Al prompt dei comandi digitare quanto segue:

sqlcmd

At the sqlcmd prompt type:

USE AdventureWorks;

GO

Se si preme INVIO, verrà stampato il messaggio informativo seguente: "Il contesto di database è stato sostituito con 'AdventureWorks'".

Formato di output delle query Transact-SQL

sqlcmd stampa innanzitutto un'intestazione di colonna contenente i nomi delle colonne specificati nell'elenco di selezione. I nomi di colonna sono delimitati tramite il carattere specificato da SQLCMDCOLSEP. Per impostazione predefinita, viene utilizzato uno spazio. Se la lunghezza del nome di colonna è minore della larghezza della colonna, nell'output vengono inseriti caratteri di riempimento fino alla colonna successiva.

La riga sarà seguita da una riga di separazione costituita da una serie di trattini. Di seguito è riportato un esempio di output.

Avviare sqlcmd. Al prompt dei comandi sqlcmd digitare quanto segue:

USE AdventureWorks;

SELECT TOP (2) ContactID, FirstName, LastName

FROM Person.Contact;

GO

Se si preme INVIO, viene restituito il set di risultati seguente.

ContactID FirstName LastName

----------- ------------ ----------

1 Syed Abbas

2 Catherine Abel

(2 row(s) affected)

Nonostante la larghezza della colonna ContactID sia soltanto di 4 caratteri, la colonna viene espansa in modo da contenere un nome di colonna più lungo. Per impostazione predefinita, l'output viene troncato a 80 caratteri. Questo valore può essere modificato utilizzando l'opzione -w oppure impostando la variabile di scripting SQLCMDCOLWIDTH.

Formato di output XML

L'output XML risultante dalla clausola FOR XML viene restituito non formattato in un flusso continuo.

Quando è previsto output XML, utilizzare il comando :XML ON. :XML ON.

[!NOTA]

sqlcmd restituisce messaggi di errore nel formato standard. Si noti che anche l'output dei messaggi di errore viene generato nel flusso di testo XML in formato XML. Con :XML ON, sqlcmd non visualizza messaggi informativi.

Per disattivare la modalità XML, utilizzare il comando :XML OFF. :XML OFF.

Il comando GO non deve essere immesso prima dell'esecuzione del comando XML OFF, poiché il comando XML OFF reimposta sqlcmd sull'output orientato alle righe.

Non possono essere contemporaneamente presenti dati XML (di flusso) e dati del set di righe. Se il comando XML ON non è stato eseguito prima dell'esecuzione di un'istruzione Transact-SQL che genera flussi XML, l'output non verrà visualizzato correttamente. Se il comando XML ON è stato eseguito, non è possibile eseguire istruzioni Transact-SQL che generano normali set di righe come output.

[!NOTA]

Il comando :XML non supporta l'istruzione SET STATISTICS XML.

Procedure consigliate per sqlcmd

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

  • Utilizzare la protezione integrata.

  • Utilizzare -X negli ambienti automatizzati.

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

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

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