sqlcmd - Usare con variabili di scriptingsqlcmd - Use with Scripting Variables

Per variabile di scripting si intende una variabile utilizzata negli script.Variables that are used in scripts are called scripting variables. Le variabili di scripting consentono di utilizzare uno script in più scenari.Scripting variables enable one script to be used in multiple scenarios. Se, ad esempio, si desidera eseguire uno script su più server, è possibile utilizzare una variabile di scripting per il nome del server anziché modificare lo script per ogni server.For example, if you want to run one script against multiple servers, instead of modifying the script for each server, you can use a scripting variable for the server name. È infatti sufficiente modificare il nome del server fornito alla variabile di scripting per eseguire lo stesso script su server diversi.By changing the server name supplied to the scripting variable, the same script can be executed on different servers.

Le variabili di scripting possono essere definite in modo esplicito con il comando setvar oppure in modo implicito con l'opzione sqlcmd-v .Scripting variables can be defined explicitly by using the setvar command, or implicitly by using the sqlcmd-v option.

Questo argomento presenta anche alcuni esempi in cui vengono definite variabili di ambiente al prompt dei comandi Cmd.exe con SET.This topic also includes examples defining environmental variables at the Cmd.exe command prompt by using SET.

Impostazione delle variabili di scripting tramite il comando setvarSetting Scripting Variables by Using the setvar Command

Il comando setvar consente di definire variabili di scripting.The setvar command is used to define scripting variables. Le variabili definite con il comando setvar vengono archiviate internamente.Variables that are defined by using the setvar command are stored internally. Le variabili di scripting non devono essere confuse con le variabili di ambiente che vengono definite al prompt dei comandi con SET.Scripting variables should not be confused with environment variables that are defined at the command prompt by using SET. Se uno script fa riferimento a una variabile che non corrisponde a una variabile di ambiente oppure che non è stata definita con il comando setvar, verrà restituito un messaggio di errore e l'esecuzione dello script verrà arrestata.If a script references a variable that is not an environment variable or is not defined by using setvar, an error message is returned and the execution of the script will stop. Per altre informazioni, vedere l'opzione -b in Utilità sqlcmd.For more information, see the -b option in sqlcmd Utility.

Precedenza delle variabili (in ordine crescente)Variable Precedence (Low to High)

Se è stato assegnato lo stesso nome a più tipi di variabile, verrà utilizzata la variabile con la precedenza più alta.If more than one type of variable has the same name, the variable with the highest precedence is used.

  1. Variabili di ambiente a livello di sistemaSystem level environmental variables

  2. Variabili di ambiente a livello di utenteUser level environmental variables

  3. Shell dei comandi (SET X=Y) impostata al prompt dei comandi prima dell'avvio di sqlcmdCommand shell (SET X=Y) set at command prompt before starting sqlcmd

  4. sqlcmd-v X=Ysqlcmd-v X=Y

  5. :Setvar X Y:Setvar X Y

Nota

Per visualizzare le variabili di ambiente, nel Pannello di controlloaprire Sistemaquindi fare clic sulla scheda Avanzate .To view the environmental variables, in Control Panel, open System, and then click the Advanced tab.

Impostazione implicita delle variabili di scriptingImplicitly Setting Scripting Variables

Quando si avvia sqlcmd con un'opzione cui è correlata una variabile sqlcmd , la variabile sqlcmd viene impostata in modo implicito sul valore specificato con l'opzione.When you start sqlcmd with an option that has a related sqlcmd variable, the sqlcmd variable is set implicitly to the value that is specified by using the option. Nell'esempio seguente sqlcmd viene avviato con l'opzione -l .In the following example, sqlcmd is started with the -l option. La variabile SQLLOGINTIMEOUT viene quindi impostata in modo implicito.This implicitly sets the SQLLOGINTIMEOUT variable.

c:\> sqlcmd -l 60

È anche possibile usare l'opzione -v per impostare una variabile di scripting presente in uno script.You can also use the -v option to set a scripting variable that exists in a script. Nello script seguente (il nome di file è testscript.sql) ColumnName è una variabile di scripting.In the following script (the file name is testscript.sql), ColumnName is a scripting variable.

USE AdventureWorks2012;

SELECT x.$(ColumnName)

FROM Person.Person x

WHERE x.BusinessEntityID < 5;

È quindi possibile specificare il nome della colonna che si desidera restituire utilizzando l'opzione -v :You can then specify the name of the column that you want returned by using the -v option:

sqlcmd -v ColumnName ="FirstName" -i c:\testscript.sql

Per restituire una colonna diversa utilizzando lo stesso script, modificare il valore della variabile di scripting ColumnName .To return a different column by using the same script, change the value of the ColumnName scripting variable.

sqlcmd -v ColumnName ="LastName" -i c:\testscript.sql

Linee guida relative ai nomi e ai valori delle variabili di scriptingGuidelines for Scripting Variable Names and Values

Quando si assegna un nome alle variabili di scripting, è necessario tenere presenti le linee guida seguenti:Consider the following guidelines when you name scripting variables:

  • I nomi delle variabili non devono contenere spazi vuoti o virgolette.Variable names must not contain white space characters or quotation marks.

  • Il formato dei nomi delle variabili non deve essere identico a quello di un'espressione con variabili, ad esempio $(var).Variable names must not have the same form as a variable expression, such as $(var).

  • Per le variabili di scripting non viene fatta distinzione tra maiuscole e minuscole.Scripting variables are case-insensitive

    Nota

    Se non viene assegnato alcun valore a una variabile di ambiente sqlcmd , la variabile viene rimossa.If no value is assigned to a sqlcmd environment variable, the variable is removed. Se si usa :setvar VarName senza un valore, la variabile viene cancellata.Using :setvar VarName without a value clears the variable.

    Quando si specifica un valore per le variabili di scripting, è necessario tenere presenti le linee guida seguenti:Consider the following guidelines when you specify values for scripting variables:

  • I valori delle variabili definiti con setvar o l'opzione -v devono essere racchiusi tra virgolette se il valore stringa contiene spazi.Variable values that are defined by using setvar or the -v option must be enclosed by quotation marks if the string value contains spaces.

  • Se le virgolette fanno parte del valore della variabile, è necessario utilizzare i caratteri di escape.If quotation marks are part of the variable value, they must be escaped. Ad esempio, :setvar MyVar "spac""e".For example: :setvar MyVar "spac""e".

Linee guida relative ai valori e ai nomi delle variabili definite tramite SET in Cmd.exeGuidelines for Cmd.exe SET Variable Values and Names

Le variabili definite con SET fanno parte dell'ambiente Cmd.exe e sqlcmdpuò farvi riferimento.Variables that are defined by using SET are part of the Cmd.exe environment and can be referenced by sqlcmd. Tenere presenti le linee guida seguenti:Consider the following guidelines:

  • I nomi delle variabili non devono contenere spazi vuoti o virgolette.Variable names must not contain white space characters or quotation marks.

  • I valori delle variabili possono contenere spazi o virgolette.Variable values may contain spaces or quotation marks.

Variabili di scripting di sqlcmdsqlcmd Scripting Variables

Le variabili definite con sqlcmd sono note come variabili di scripting.Variables that are defined by sqlcmd are known as scripting variables. Nella tabella seguente sono elencate le variabili di scripting di sqlcmd .The following table lists sqlcmd scripting variables.

VariabileVariable Opzione correlataRelated option L/SR/W Valore predefinitoDefault
SQLCMDUSERSQLCMDUSER -U-U LR """"
SQLCMDPASSWORDSQLCMDPASSWORD -P-P -- """"
SQLCMDSERVERSQLCMDSERVER -S-S LR "DefaultLocalInstance""DefaultLocalInstance"
SQLCMDWORKSTATIONSQLCMDWORKSTATION -H-H LR "ComputerName""ComputerName"
SQLCMDDBNAMESQLCMDDBNAME -d-d LR """"
SQLCMDLOGINTIMEOUTSQLCMDLOGINTIMEOUT -l-l L/SR/W "8" (secondi)"8" (seconds)
SQLCMDSTATTIMEOUTSQLCMDSTATTIMEOUT -t-t L/SR/W "0" = attesa illimitata"0" = wait indefinitely
SQLCMDHEADERSSQLCMDHEADERS -H-h L/SR/W "0""0"
SQLCMDCOLSEPSQLCMDCOLSEP -S-s L/SR/W " "." "
SQLCMDCOLWIDTHSQLCMDCOLWIDTH -w-w L/SR/W "0""0"
SQLCMDPACKETSIZESQLCMDPACKETSIZE -A-a LR "4096""4096"
SQLCMDERRORLEVELSQLCMDERRORLEVEL -M-m L/SR/W "0""0"
SQLCMDMAXVARTYPEWIDTHSQLCMDMAXVARTYPEWIDTH -y-y L/SR/W "256""256"
SQLCMDMAXFIXEDTYPEWIDTHSQLCMDMAXFIXEDTYPEWIDTH -y-Y L/SR/W "0" = numero illimitato"0" = unlimited
SQLCMDEDITORSQLCMDEDITOR L/SR/W "edit.com""edit.com"
SQLCMDINISQLCMDINI LR """"

* Le variabili SQLCMDUSER, SQLCMDPASSWORD e SQLCMDSERVER vengono impostate quando viene usato :Connect .* SQLCMDUSER, SQLCMDPASSWORD and SQLCMDSERVER are set when :Connect is used.

La lettera L indica che il valore può essere impostato una sola volta durante l'inizializzazione del programma.R indicates the value can only be set one time during program initialization.

L/S indica che il valore può essere reimpostato con il comando setvar e i comandi successivi useranno il nuovo valore.R/W indicates that the value can be reset by using the setvar command and subsequent commands will use the new value.

EsempiExamples

A.A. Utilizzo del comando setvar in uno scriptUsing the setvar command in a script

Molte opzioni di sqlcmd possono essere controllate in uno script usando il comando setvar .Many sqlcmd options can be controlled in a script by using the setvar command. Nell'esempio seguente viene creato lo script test.sql , in cui la variabile SQLCMDLOGINTIMEOUT viene impostata su 60 secondi e un'altra variabile di scripting, server, viene impostata su testserver.In the following example, the script test.sql is created in which the SQLCMDLOGINTIMEOUT variable is set to 60 seconds and another scripting variable, server, is set to testserver. Il codice seguente è incluso in test.sql.The following code is in test.sql.

:setvar SQLCMDLOGINTIMEOUT 60

:setvar server "testserver"

:connect $(server) -l $(SQLCMDLOGINTIMEOUT)

USE AdventureWorks2012;

SELECT FirstName, LastName

FROM Person.Person;

The script is then called by using sqlcmd:

sqlcmd -i c:\test.sql

B.B. Utilizzo interattivo del comando setvarUsing the setvar command interactively

Nell'esempio seguente viene illustrato come impostare una variabile di scripting in modo interattivo tramite il comando setvar .The following example shows how to set a scripting variable interactively by using the setvar command.

sqlcmd

:setvar MYDATABASE AdventureWorks2012

USE $(MYDATABASE);

GO

Set di risultati:Here is the result set.

Changed database context to 'AdventureWorks2012'

1>

C.C. Utilizzo delle variabili di ambiente dal prompt del comandi all'interno di sqlcmdUsing command prompt environment variables within sqlcmd

Nell'esempio seguente vengono impostate quattro variabili di ambiente are , che vengono quindi chiamate da sqlcmd.In the following example, four environment variables are set and then called from sqlcmd.

C:\>SET tablename=Person.Person

C:\>SET col1=FirstName

C:\>SET col2=LastName

C:\>SET title=Ms.

C:\>sqlcmd -d AdventureWorks2012

1> SELECT TOP 5 $(col1) + ' ' + $(col2) AS Name

2> FROM $(tablename)

3> WHERE Title ='$(title)'

4> GO

D.D. Utilizzo di variabili di ambiente a livello di utente all'interno di sqlcmdUsing user-level environment variables within sqlcmd

Nell'esempio seguente viene impostata al prompt dei comandi la variabile di ambiente a livello di utente %Temp% , che viene quindi passata al file di input sqlcmd .In the following example the user-level environmental variable %Temp% is set at the command prompt and passed to the sqlcmd input file. Per ottenere la variabile di ambiente a livello di utente, nel Pannello di controllofare doppio clic su Sistema.To obtain the user-level environment variable, in Control Panel, double-click System. Fare clic sulla scheda Avanzate e quindi fare clic sul pulsante Variabili d'ambiente.Click the Advance tab, and then click Environment Variables.

Il codice seguente è presente nel file di input c:\testscript.txt:The following code is in the input file c:\testscript.txt:

:OUT $(MyTempDirectory)

USE AdventureWorks2012;

SELECT FirstName

FROM AdventureWorks2012.Person.Person

WHERE BusinessEntityID < 5;WHERE BusinessEntityID < 5;

Il codice seguente viene immesso al prompt dei comandi:This following code is entered at the command prompt:

C:\ >SET MyTempDirectory=%Temp%\output.txt

C:\ >sqlcmd -i C:\testscript.txt

Il risultato seguente viene inviato al file di output C:\Documents and Settings\>\Local Settings\Temp\output.txt.The following result is sent to the output file C:\Documents and Settings\\Local Settings\Temp\output.txt.

Changed database context to 'AdventureWorks2012'.

FirstName

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

Gustavo

Catherine

Kim

Humberto

(4 rows affected)

E.E. Utilizzo di uno script di avvioUsing a startup script

Uno script di avvio di sqlcmd viene eseguito all'avvio di sqlcmd .A sqlcmd startup script is executed when sqlcmd is started. Nell'esempio seguente viene impostata la variabile di ambiente SQLCMDINI.The following example sets the environment variable SQLCMDINI. Di seguito è riportato il contenuto di init.sql.This is the contents of init.sql.

SET NOCOUNT ON

GO

DECLARE @nt_username nvarchar(128)

SET @nt_username = (SELECT rtrim(convert(nvarchar(128), nt_username))

FROM sys.dm_exec_sessions WHERE spid = @@SPID)

SELECT @nt_username + ' is connected to ' +

rtrim(CONVERT(nvarchar(20), SERVERPROPERTY('servername'))) +

' (' +

rtrim(CONVERT(nvarchar(20), SERVERPROPERTY('productversion'))) +

')'

:setvar SQLCMDMAXFIXEDTYPEWIDTH 100

SET NOCOUNT OFF

GO

:setvar SQLCMDMAXFIXEDTYPEWIDTH

Di conseguenza, viene chiamato il file init.sql all'avvio di sqlcmd .This calls the init.sql file when sqlcmd is started.

C:\> SET sqlcmdini=c:\init.sql

>1 Sqlcmd

Di seguito è riportato l'output.This is the output.

>1 < user > is connected to < server > (9.00.2047.00)

Nota

L'opzione -X disabilita la funzionalità degli script di avvio.The -X option disables the startup script feature.

F.F. Espansione delle variabiliVariable expansion

L'esempio seguente illustra l'uso dei dati sotto forma di variabile di sqlcmd .The following example shows working with data in the form of a sqlcmd variable.

USE AdventureWorks2012;

CREATE TABLE AdventureWorks2012.dbo.VariableTest

(

Col1 nvarchar(50)

);

GO

Inserire una riga nella colonna Col1 di dbo.VariableTest contenente il valore $(tablename).Insert one row into Col1 of dbo.VariableTest that contains the value $(tablename).

INSERT INTO AdventureWorks2012.dbo.VariableTest(Col1)

VALUES('$(tablename)');

GO

Nel prompt di sqlcmd , se non viene impostata alcuna variabile su $(tablename), la riga viene restituita dalle istruzioni seguenti.At the sqlcmd prompt, when no variable is set equal to $(tablename), the following statements return the row.

C:\> sqlcmd

>1 SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(tablename)';

>2 GO

>3 SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(tablename)';

>4 GO

Set di risultati:Here is the result set.

>1 Col1

>2 ------------------

>3 $(tablename)

>4

>5 (1 rows affected)

A condizione che la variabile MyVar sia impostata su $(tablename).Given the variable MyVar is set to $(tablename).

>6 :setvar MyVar $(tablename)

Queste istruzioni restituiscono la riga e il messaggio "Variabile di scripting 'tablename' non definita".These statements return the row and also return the message "'tablename' scripting variable not defined."

>6 SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(tablename)';

>7 GO

>1 SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(tablename)';

>2 GO

La riga viene restituita dalle istruzioni seguenti.These statements return the row.

>1 SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(MyVar)';

>2 GO

>1 SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(MyVar)';

>2 GO

Vedere ancheSee Also

Utilizzo dell'utilità sqlcmd Use the sqlcmd Utility
Utilità sqlcmd sqlcmd Utility
Guida di riferimento alle utilità del prompt dei comandi (Motore di database) Command Prompt Utility Reference (Database Engine)