Usare l'utilità sqlcmd

L'utilità sqlcmd è un'utilità della riga di comando per l'esecuzione interattiva ad hoc di istruzioni e script Transact-SQL e per automatizzare Transact-SQL attività di scripting. Per usare sqlcmd in modo interattivo o per compilare file di script da eseguire usando sqlcmd, gli utenti devono comprendere Transact-SQL. L'utilità sqlcmd viene in genere usata nei modi seguenti:

  • Gli utenti immettono in modo interattivo Transact-SQL istruzioni in modo simile all'utilizzo al prompt dei comandi. I risultati vengono visualizzati al prompt dei comandi. Per aprire una finestra del prompt dei comandi, fare clic su Start, fare clic su Tutti i programmi, scegliere Accessorie quindi fare clic su Prompt dei comandi. Al prompt dei comandi digitare sqlcmd seguito da un elenco delle opzioni desiderate. Per un elenco completo delle opzioni supportate da sqlcmd, vedere Utilità sqlcmd.

  • Gli utenti inviano un sqlcmd processo specificando una singola istruzione Transact-SQL da eseguire oppure puntando l'utilità a un file di testo contenente istruzioni Transact-SQL da eseguire. L'output viene in genere indirizzato a un file di testo, ma può anche essere visualizzato al prompt dei comandi.

  • Modalità SQLCMD in SQL Server Management Studio Editor di query.

  • Oggetti SMO (SQL Server Management Objects)

  • Attività CmdExec di SQL Server Agent.

Opzioni sqlcmd usate in genere

Le opzioni seguenti vengono usate più frequentemente:

  • Opzione server (-S) che identifica l'istanza di Microsoft SQL Server a cui sqlcmd si connette.

  • Opzioni di autenticazione (-E, -U e -P) che specificano le credenziali usate sqlcmd per connettersi all'istanza di SQL Server.

    Note

    L'opzione -E è l'impostazione predefinita e non deve essere specificata.

  • Opzioni di input (-Q, -q e -i) che identificano la posizione dell'input in sqlcmd.

  • Opzione di output (-o) che specifica il file in cui sqlcmd inserire il relativo output.

Connessione all'utilità sqlcmd

Di seguito sono riportati gli usi comuni dell'utilità sqlcmd :

  • Connessione a un'istanza predefinita usando l'autenticazione Windows per eseguire in modo interattivo istruzioni Transact-SQL:

    sqlcmd -S <ComputerName>  
    

    Note

    Nell'esempio precedente - E non viene specificato perché è l'impostazione predefinita e sqlcmd si connette all'istanza predefinita usando Windows Authentication.

  • Connessione a un'istanza denominata usando Windows Authentication per eseguire in modo interattivo istruzioni Transact-SQL:

    sqlcmd -S <ComputerName>\<InstanceName>  
    

    o

    sqlcmd -S .\<InstanceName>  
    
  • Connessione a un'istanza denominata usando l'autenticazione Windows e specificando i file di input e output:

    sqlcmd -S <ComputerName>\<InstanceName> -i <MyScript.sql> -o <MyOutput.rpt>  
    
  • Connessione all'istanza predefinita nel computer locale tramite Windows Autenticazione, esecuzione di una query e sqlcmd restare in esecuzione al termine dell'esecuzione della query:

    sqlcmd -q "SELECT * FROM AdventureWorks2012.Person.Person"  
    
  • Connessione all'istanza predefinita nel computer locale tramite Windows Autenticazione, esecuzione di una query, indirizzamento dell'output a un file e sqlcmd chiusura dopo il completamento dell'esecuzione della query:

    sqlcmd -Q "SELECT * FROM AdventureWorks2012.Person.Person" -o MyOutput.txt  
    
  • Connessione a un'istanza denominata tramite autenticazione SQL Server per eseguire in modo interattivo istruzioni Transact-SQL, con sqlcmd la richiesta di una password:

    sqlcmd -U MyLogin -S <ComputerName>\<InstanceName>  
    

    Note

    Per visualizzare un elenco delle opzioni supportate dall'utilità sqlcmd eseguire: sqlcmd -?.

Esecuzione interattiva di istruzioni Transact-SQL tramite sqlcmd

È possibile usare l'utilità sqlcmd in modo interattivo per eseguire istruzioni Transact-SQL in una finestra del prompt dei comandi. Per eseguire in modo interattivo Transact-SQL istruzioni usando sqlcmd, eseguire l'utilità senza usare le opzioni -Q, -q, -Z o -i per specificare qualsiasi file o query di input. Per esempio:

sqlcmd -S <ComputerName>\<InstanceName>

Quando il comando viene eseguito senza file di input o query, sqlcmd si connette all'istanza specificata di SQL Server e quindi visualizza una nuova riga con un 1> seguito da un carattere di sottolineatura lampeggiante denominato promptsqlcmd. 1 Indica che si tratta della prima riga di un'istruzione Transact-SQL e che il sqlcmd prompt è il punto in cui l'istruzione Transact-SQL inizierà quando la si digita.

sqlcmd Al prompt è possibile digitare sia istruzioni Transact-SQL che sqlcmd comandi, ad esempio GO e EXIT. Ogni istruzione Transact-SQL viene inserita in un buffer denominato cache delle istruzioni. Queste istruzioni vengono inviate a SQL Server dopo aver digitato il GO comando e premere INVIO. Per uscire da sqlcmd, digitare EXIT o QUIT all'inizio di una nuova riga.

Per cancellare la cache delle istruzioni, digitare :RESET. La digitazione ^C causa l'uscita sqlcmd . ^C può essere usato anche per arrestare l'esecuzione della cache delle istruzioni dopo l'esecuzione di un GO comando.

Transact-SQL istruzioni immesse in una sessione interattiva possono essere modificate immettendo il comando :ED e il sqlcmd prompt. L'editor verrà aperto e, dopo aver modificato l'istruzione Transact-SQL e chiuso l'editor, l'istruzione Transact-SQL modificata verrà visualizzata nella finestra di comando. Immettere GO per eseguire l'istruzione Transact-SQL di Transact-SQL.

Stringhe tra virgolette

I caratteri racchiusi tra virgolette vengono utilizzati senza alcuna pre-elaborazione aggiuntiva, fatta eccezione per il fatto che è possibile inserire virgolette in una stringa immettendo due virgolette consecutive. SQL Server tratta questa sequenza di caratteri come virgoletta. Tuttavia, la traduzione viene eseguita nel server. Le variabili di scripting non verranno espanse quando vengono visualizzate all'interno di una stringa.

Per esempio:

sqlcmd

PRINT "Length: 5"" 7'";

GO

Questo è il set di risultati.

Length: 5" 7'

Stringhe che si estendono su più righe

sqlcmd supporta script con stringhe che si estendono su più righe. Ad esempio, l'istruzione seguente SELECT si estende su più righe, ma è una singola stringa eseguita quando si preme INVIO dopo aver digitato GO.

SELECT First line

FROM Second line

WHERE Third line;

GO

Esempio interattivo di sqlcmd

Questo è un esempio di ciò che viene visualizzato quando si esegue sqlcmd in modo interattivo.

Quando si apre una finestra del prompt dei comandi, è presente una riga simile alla seguente:

C:\> _

Ciò significa che la cartella è la cartella C:\ corrente e, se si specifica un nome di file, Windows cercherà il file in tale cartella.

Digitare sqlcmd per connettersi all'istanza predefinita di SQL Server nel computer locale e il contenuto della finestra del prompt dei comandi sarà:

C:\>sqlcmd

1> _

Ciò significa che si è connessi all'istanza di SQL Server ed sqlcmd è ora possibile accettare istruzioni e sqlcmd comandi Transact-SQL. Il carattere di sottolineatura lampeggiante dopo è 1> il sqlcmd prompt che contrassegna il percorso in cui verranno visualizzate le istruzioni e i comandi digitati. USE AdventureWorks2012 Digitare e premere INVIO, quindi digitare GO e premere INVIO. Il contenuto della finestra del prompt dei comandi sarà:

sqlcmd

USE AdventureWorks2012;

GO

Questo è il set di risultati.

Changed database context to 'AdventureWorks2012'.

1> _

Premendo INVIO dopo aver immesso USE AdventureWorks2012 segnalato sqlcmd per avviare una nuova riga. Premendo INVIO, dopo aver digitato GO, per sqlcmd inviare l'istruzione all'istanza USE AdventureWorks2012 di SQL Server. sqlcmd ha quindi restituito un messaggio per indicare che l'istruzione USE è stata completata correttamente e ha visualizzato un nuovo prompt come segnale per immettere una nuova 1> istruzione o un comando.

Nell'esempio seguente viene illustrato il contenuto della finestra del prompt dei comandi se si digita un'istruzione SELECT , un GO oggetto per eseguire SELECTe un oggetto EXIT per uscire sqlcmdda :

sqlcmd

USE AdventureWorks2012;

GO

SELECT TOP (3) BusinessEntityID, FirstName, LastName

FROM Person.Person;

GO

Questo è il set di risultati.

BusinessEntityID FirstName LastName

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

1 Syed Abbas

2 Catherine Abel

3 Kim Abercrombie

(3 rows affected)

1> EXIT

C:\>

Le righe dopo la riga 3> GO sono l'output di un'istruzione SELECT . Dopo aver generato l'output, sqlcmd reimposta il sqlcmd prompt e visualizza 1>. Dopo aver immesso EXIT alla riga 1>, nella finestra del prompt dei comandi viene visualizzata la stessa riga eseguita al primo apertura. Indica che sqlcmd è stata chiusa la sessione. È ora possibile chiudere la finestra del prompt dei comandi digitando un altro comando EXIT .

Esecuzione di file di script Transact-SQL tramite sqlcmd

È possibile usare sqlcmd per eseguire i file di script del database. I file di script sono file di testo che contengono una combinazione di istruzioni Transact-SQL, sqlcmd comandi e variabili di scripting. Per altre informazioni su come creare script per le variabili, vedere Usare sqlcmd con variabili di scripting. sqlcmd funziona con istruzioni, comandi e variabili di scripting in un file di script in modo simile a come funziona con istruzioni e comandi immessi in modo interattivo. La differenza principale è che sqlcmd legge il file di input senza sospendere anziché attendere che un utente immetta le istruzioni, i comandi e le variabili di scripting.

I file script di database possono essere creati nei modi seguenti:

  • È possibile compilare ed eseguire il debug interattivo di un set di istruzioni Transact-SQL in SQL Server Management Studio e quindi salvare il contenuto della finestra query come file di script.

  • È possibile creare un file di testo contenente istruzioni Transact-SQL usando un editor di testo, ad esempio Blocco note.

Examples

A. Esecuzione di uno script tramite sqlcmd

Avviare blocco note e digitare le istruzioni Transact-SQL seguenti:

USE AdventureWorks2012;

GO

SELECT TOP (3) BusinessEntityID, FirstName, LastName

FROM Person.Person;

GO

Creare una cartella denominata MyFolder e quindi salvare lo script come file MyScript.sql nella cartella C:\MyFolder. Immettere quanto segue al prompt dei comandi per eseguire lo script e inserire l'output in MyOutput.txtMyFolder:

sqlcmd -i C:\MyFolder\MyScript.sql -o C:\MyFolder\MyOutput.txt

Quando si visualizza il contenuto di MyOutput.txt in Blocco note, verranno visualizzati gli elementi seguenti:

Changed database context to 'AdventureWorks2012'.

BusinessEntityID FirstName LastName

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

1 Syed Abbas

2 Catherine Abel

3 Kim Abercrombie

(3 rows affected)

B. Uso di sqlcmd con una connessione amministrativa dedicata

Nell'esempio sqlcmd seguente viene usato per connettersi a un server che presenta un problema di blocco usando la connessione amministrativa dedicata.

C:\>sqlcmd -S ServerName -A

1> SELECT blocked FROM sys.dm_exec_requests WHERE blocked <> 0;

2> GO

Questo è il set di risultati.

spid blocked

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

62 64

(1 rows affected)

Usare sqlcmd per terminare il processo di blocco.

1> KILL 64;

2> GO

C. Uso di sqlcmd per eseguire una stored procedure

Nell'esempio seguente viene illustrato come eseguire una stored procedure usando sqlcmd. Crea la seguente procedura archiviata.

USE AdventureWorks2012;

IF OBJECT_ID ( ' dbo.ContactEmailAddress, 'P' ) IS NOT NULL

DROP PROCEDURE dbo.ContactEmailAddress;

GO

CREATE PROCEDURE dbo.ContactEmailAddress

(

@FirstName nvarchar(50)

,@LastName nvarchar(50)

)

AS

SET NOCOUNT ON

SELECT EmailAddress

FROM Person.Person

WHERE FirstName = @FirstName

AND LastName = @LastName;

SET NOCOUNT OFF

sqlcmd Al prompt immettere quanto segue:

C:\sqlcmd

1> :Setvar FirstName Gustavo

1> :Setvar LastName Achong

1> EXEC dbo.ContactEmailAddress $(Gustavo),$(Achong)

2> GO

EmailAddress

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

gustavo0@adventure-works.com

D. Uso di sqlcmd per la manutenzione del database

Nell'esempio seguente viene illustrato come usare sqlcmd per un'attività di manutenzione del database. Creare C:\BackupTemplate.sql con il codice seguente.

USE master;

BACKUP DATABASE [$(db)] TO DISK='$(bakfile)';

sqlcmd Al prompt immettere quanto segue:

C:\ >sqlcmd

1> :connect <server>

Sqlcmd: Successfully connected to server <server>.

1> :setvar db msdb

1> :setvar bakfile c:\msdb.bak

1> :r c:\BackupTemplate.sql

2> GO

Changed database context to 'master'.

Processed 688 pages for database 'msdb', file 'MSDBData' on file 2.

Processed 5 pages for database 'msdb', file 'MSDBLog' on file 2.

BACKUP DATABASE successfully processed 693 pages in 0.725 seconds (7.830 MB/sec)

E. Uso di sqlcmd per eseguire codice in più istanze

Il codice seguente in un file rappresenta un esempio di script che si connette a due istanze. Si noti il comando GO prima della connessione alla seconda istanza.

:CONNECT <server>\,<instance1>

EXEC dbo.SomeProcedure

GO

:CONNECT <server>\,<instance2>

EXEC dbo.SomeProcedure

GO

E. Restituzione dell'output XML

Nell'esempio seguente viene illustrato come l'output XML venga restituito non formattato in un flusso continuo.

C:\>sqlcmd -d AdventureWorks2012

1> :XML ON

1> SELECT TOP 3 FirstName + ' ' + LastName + ', '

2> FROM Person.Person

3> GO

Syed Abbas, Catherine Abel, Kim Abercrombie,

F. Uso di sqlcmd in un file di script Windows

Un sqlcmdcomando, ad esempio sqlcmd -i C:\InputFile.txt -o C:\OutputFile.txt, , può essere eseguito in un file .bat insieme a VBScript. In questo caso, non usare opzioni interattive. sqlcmd deve essere installato nel computer che esegue il file .bat.

Creare prima di tutto i quattro file seguenti:

  • C:\badscript.sql

    SELECT batch_1_this_is_an_error  
    GO  
    SELECT 'batch #2'  
    GO  
    
  • C:\goodscript.sql

    SELECT 'batch #1'  
    GO  
    SELECT 'batch #2'  
    GO  
    
  • C:\returnvalue.sql

    :exit(select 100)  
    @echo off  
    C:\windowsscript.bat  
    @echo off  
    
    echo Running badscript.sql  
    sqlcmd -i badscript.sql -b -o out.log  
    if not errorlevel 1 goto next1  
    echo == An error occurred   
    
    :next1  
    
    echo Running goodscript.sql  
    sqlcmd -i goodscript.sql -b -o out.log  
    if not errorlevel 1 goto next2  
    echo == An error occurred   
    
    :next2  
    echo Running returnvalue.sql  
    sqlcmd -i returnvalue.sql -o out.log  
    echo SQLCMD returned %errorlevel% to the command shell  
    
    :exit  
    
  • C:\windowsscript.bat

    @echo off  
    
    echo Running badscript.sql  
    sqlcmd -i badscript.sql -b -o out.log  
    if not errorlevel 1 goto next1  
    echo == An error occurred   
    
    :next1  
    
    echo Running goodscript.sql  
    sqlcmd -i goodscript.sql -b -o out.log  
    if not errorlevel 1 goto next2  
    echo == An error occurred   
    
    :next2  
    echo Running returnvalue.sql  
    sqlcmd -i returnvalue.sql -o out.log  
    echo SQLCMD returned %errorlevel% to the command shell  
    
    :exit  
    

Quindi, al prompt dei comandi, digita C:\windowsscript.bat:

C:\>windowsscript.bat

Running badscript.sql

== An error occurred

Running goodscript.sql

Running returnvalue.sql

SQLCMD returned 100 to the command shell

G. Uso di sqlcmd per impostare la crittografia in database SQL di Azure

È sqlcmdpossibile eseguire un oggetto in una connessione ai dati del database SQL in per specificare la crittografia e l'attendibilità del certificato. Sono disponibili due opzioni 'sqlcmd'':

  • L'opzione -N viene usata dal client per richiedere una connessione crittografata. Equivale all'opzione ADO.net ENCRYPT = true.

  • L'opzione -C viene usata dal client per configurarla in modo implicito sul certificato del server di attendibilità e non convalidarla. Equivale all'opzione ADO.net TRUSTSERVERCERTIFICATE = true.

Il servizio database SQL non supporta tutte le SET opzioni disponibili in un'istanza di SQL Server. Nelle opzioni seguenti viene generato un errore quando l'opzione SET corrispondente è impostata su ON o OFF:

  • SET ANSI_DEFAULTS

  • SET ANSI_NULLS

  • SET REMOTE_PROC_TRANSACTIONS

  • SET ANSI_NULL_DEFAULT

Le opzioni seguenti SET non generano eccezioni, ma non possono essere usate. Sono deprecati:

  • SET CONCAT_NULL_YIELDS_NULL

  • SET ANSI_PADDING

  • SET QUERY_GOVERNOR_COST_LIMIT

Syntax

Gli esempi seguenti fanno riferimento ai casi in cui SQL Server impostazioni del provider Native Client includono: ForceProtocolEncryption = False,Trust Server Certificate = No

Effettuare la connessione utilizzando le credenziali di Windows e la comunicazione crittografata:

SQLCMD -E -N  
  

Effettuare la connessione utilizzando le credenziali di Windows e un certificato server attendibile:

SQLCMD -E -C  
  

Effettuare la connessione utilizzando le credenziali di Windows, la comunicazione crittografata e un certificato server attendibile:

SQLCMD -E -N -C  
  

Gli esempi seguenti fanno riferimento ai casi in cui SQL Server impostazioni del provider Native Client includono: ForceProtocolEncryption = True, TrustServerCertificate = Yes.

Effettuare la connessione utilizzando le credenziali di Windows, la comunicazione crittografata e un certificato server attendibile:

SQLCMD -E  
  

Effettuare la connessione utilizzando le credenziali di Windows, la comunicazione crittografata e un certificato server attendibile:

SQLCMD -E -N  
  

Effettuare la connessione utilizzando le credenziali di Windows, la comunicazione crittografata e un certificato server attendibile:

SQLCMD -E -T  
  

Effettuare la connessione utilizzando le credenziali di Windows, la comunicazione crittografata e un certificato server attendibile:

SQLCMD -E -N -C  
  

Se il provider specificaForceProtocolEncryption = True, la crittografia viene abilitata anche se Encrypt=No nel stringa di connessione.

Vedere anche

Utilità sqlcmd
Utilizzo di sqlcmd con variabili di scripting
Modifica script SQLCMD con il Gestore delle query
Gestire i passaggi del lavoro
Creare un passaggio di attività CmdExec