Exporter (0) Imprimer
Développer tout

Utilisation de sqlcmd avec des variables de script

Mis à jour : 17 juillet 2006

Les variables utilisées dans les scripts sont appelées des variables de script. Ces variables permettent à un script d'être utilisé dans plusieurs scénarios. Par exemple, pour exécuter un script sur plusieurs serveurs, vous pouvez utiliser une variable de script pour le nom du serveur au lieu de modifier le script pour chaque serveur. La modification du nom de serveur fourni à la variable de script permet d'exécuter le même script sur différents serveurs.

Les variables de script peuvent être définies explicitement à l'aide de la commande setvar ou implicitement à l'aide de l'option sqlcmd -v.

Cette rubrique inclut aussi des exemples qui définissent les variables d'environnement à l'invite de commandes Cmd.exe en utilisant SET.

La commande setvar permet de définir les variables de script. Les variables définies à l'aide de la commande setvar sont stockées de manière interne. Les variables de script diffèrent des variables d'environnement qui sont définies à l'invite de commandes en utilisant SET. Si un script référence une variable qui n'est pas une variable d'environnement ou qui n'est pas définie à l'aide de la commande setvar, un message d'erreur est renvoyé et l'exécution du script s'arrête. Pour plus d'informations, consultez l'option -b dans Utilitaire sqlcmd.

Si plusieurs types de variable ont le même nom, la variable dont la priorité est la plus élevée est utilisée.

  1. Variables d'environnement de niveau système
  2. Variables d'environnement de niveau utilisateur
  3. Environnement de commande (SET X=Y) défini à l'invite de commandes avant le démarrage de sqlcmd
  4. sqlcmd -v X=Y
  5. :Setvar X Y
ms188714.note(fr-fr,SQL.90).gifRemarque :
Pour afficher les variables d'environnement, dans le Panneau de configuration, ouvrez Système, puis cliquez sur l'onglet Avancé.

Lorsque vous démarrez sqlcmd avec une option associée à une variable sqlcmd, cette variable prend implicitement la valeur spécifiée à l'aide de l'option. Dans l'exemple suivant, sqlcmd est démarré avec l'option -l . Cette opération définit implicitement la variable SQLLOGINTIMEOUT.

c:\> sqlcmd -l 60

Vous pouvez également utiliser l'option -v pour définir une variable de script existant dans un script. Dans le script suivant (le nom de fichier est testscript.sql), ColumnName représente une variable de script.

USE AdventureWorks;

SELECT c.$(ColumnName)

FROM Person.Contact x

WHERE c.ContactID < 5;

Vous pouvez ensuite spécifier le nom de la colonne à retourner à l'aide de l'option -v :

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

Pour retourner une autre colonne à l'aide du même script, modifiez la valeur de la variable de script ColumnName.

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

Lorsque vous nommez des variables de script, tenez compte des instructions suivantes :

  • Les noms de variable ne doivent pas contenir d'espaces blancs ou de guillemets.
  • Les noms de variable ne peuvent pas avoir la même forme qu'une expression de variable, telle que $(var).
  • Les variables de script ne respectent pas la casse.
    ms188714.note(fr-fr,SQL.90).gifRemarque :
    Si aucune valeur n'est affectée à une variable d'environnement sqlcmd, la variable est supprimée. L'utilisation de :setvar VarName sans valeur efface la variable.

Lorsque vous spécifiez des valeurs pour des variables de script, tenez compte des instructions suivantes :

  • Les valeurs de variable définies à l'aide de la commande setvar ou de l'option -v doivent être placées entre guillemets si la valeur de chaîne contient des espaces.
  • Si la valeur de variable contient des guillemets, ceux-ci doivent être en mode échappement. Par exemple : :setvar MyVar "spac""e".

Les variables définies à l'aide de SET appartiennent à l'environnement Cmd.exe et peuvent être référencées par sqlcmd. Respectez les consignes suivantes :

  • Les noms de variable ne peuvent pas contenir d'espaces blancs ou de guillemets.
  • Les valeurs de variable peuvent contenir des espaces ou des guillemets.

Les variables définies par sqlcmd sont des variables de script. Le tableau suivant dresse la liste des variables de script sqlcmd.

Variable Option connexe lecture/écriture Par défaut

SQLCMDUSER*

-U

R

""

SQLCMDPASSWORD*

-P

--

""

SQLCMDSERVER*

-S

R

"DefaultLocalInstance"

SQLCMDWORKSTATION

-H

R

"ComputerName"

SQLCMDDBNAME

-d

R

""

SQLCMDLOGINTIMEOUT

-l

Lecture/écriture

"8" (secondes)

SQLCMDSTATTIMEOUT

-t

Lecture/écriture

"0" = attendre indéfiniment

SQLCMDHEADERS

-h

Lecture/écriture

"0"

SQLCMDCOLSEP

-s

Lecture/écriture

" "

SQLCMDCOLWIDTH

-w

Lecture/écriture

"0"

SQLCMDPACKETSIZE

-a

R

"4096"

SQLCMDERRORLEVEL

-m

Lecture/écriture

"0"

SQLCMDMAXVARTYPEWIDTH

-y

Lecture/écriture

"256"

SQLCMDMAXFIXEDTYPEWIDTH

-Y

Lecture/écriture

"0" = illimité

SQLCMDEDITOR

lecture/écriture

"edit.com"

SQLCMDINI

L

""

* SQLCMDUSER, SQLCMDPASSWORD et SQLCMDSERVER sont définis si :Connect est utilisé.

« Lecture » indique que la valeur ne peut être définie qu'une seule fois à l'initialisation du programme.

« Lecture/écriture » indique que la valeur peut être réinitialisée à l'aide de la commande setvar et que les commandes ultérieures utilisent la nouvelle valeur.

A. Utilisation de la commande setvar dans un script

De nombreuses options de sqlcmd peuvent être contrôlées dans un script à l'aide de la commande setvar. Dans l'exemple suivant, le script test.sql est créé, dans lequel la variable SQLCMDLOGINTIMEOUT reçoit une valeur de 60 secondes et une variable de script, server, reçoit la valeur testserver. Le code suivant figure dans le fichier test.sql.

:setvar SQLCMDLOGINTIMEOUT 60

:setvar server "testserver"

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

USE AdventureWorks;

SELECT FirstName, LastName

FROM Person.Contact;

The script is then called by using sqlcmd:

sqlcmd -i c:\test.sql

B. Utilisation de la commande setvar de façon interactive

L'exemple suivant illustre la définition d'une variable de script de façon interactive à l'aide de la commande setvar.

sqlcmd

:setvar MYDATABASE AdventureWorks

USE $(MYDATABASE);

GO

Voici l'ensemble des résultats.

Changed database context to 'AdventureWorks'

1>

C. Utilisation de variables d'environnement à l'invite de commandes dans sqlcmd

Dans l'exemple suivant, quatre variables d'environnement sont définies puis appelées depuis sqlcmd.

C:\>SET tablename=Person.Contact

C:\>SET col1=FirstName

C:\>SET col2=LastName

C:\>SET title=Ms.

C:\>sqlcmd -d AdventureWorks

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

2> FROM $(tablename)

3> WHERE Title ='$(title)'

4> GO

C. Utilisation de variables d'environnement au niveau de l'utilisateur dans sqlcmd

Dans l'exemple suivant, la variable d'environnement au niveau de l'utilisateur %Temp% est définie à l'invite de commandes et transmise au fichier d'entrée sqlcmd. Pour obtenir la variable d'environnement au niveau de l'utilisateur, dans le Panneau de configuration, double-cliquez sur Système. Cliquez sur l'onglet Avancé, puis sur Variables d'environnement.

Le code suivant figure dans le fichier d'entrée c:\testscript.txt :

:OUT $(MyTempDirectory)

USE AdventureWorks;

SELECT FirstName

FROM AdventureWorks.Person.Contact

WHERE ContactID < 5;

Le code suivant est entré à l'invite de commandes :

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

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

Le résultat suivant est envoyé dans le fichier de sortie C:\Documents and Settings\<user>\Local Settings\Temp\output.txt.

Changed database context to 'AdventureWorks'.

FirstName

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

Gustavo

Catherine

Kim

Humberto

(4 rows affected)

E. Utilisation d'un script de démarrage

Un script de démarrage sqlcmd est exécuté au démarrage de sqlcmd. L'exemple suivant définit la variable d'environnement SQLCMDINI. Voici le contenu de init.sql..

SET NOCOUNT ON

GO

DECLARE @nt_user_name nvarchar(128)

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

FROM sys.dm_exec_sessions WHERE session_id = @@SPID);

SELECT @nt_user_name + ' is connected to ' +

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

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

:setvar SQLCMDMAXFIXEDTYPEWIDTH 100

SET NOCOUNT OFF

GO

:setvar SQLCMDMAXFIXEDTYPEWIDTH

Ce code appelle le fichier init.sql au démarrage de sqlcmd.

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

>1 Sqlcmd

Il s'agit de la sortie.

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

Remarque   L'option -X désactive la fonctionnalité de script de démarrage.

F. Utilisation l'expansion de variables

L'exemple suivant illustre l'utilisation de données sous la forme d'une variable sqlcmd.

USE AdventureWorks;

CREATE TABLE AdventureWorks.dbo.VariableTest

(

Col1 nvarchar(50)

);

GO

Insérez une ligne dans Col1 de dbo.VariableTest qui contient la valeur $(tablename).

INSERT INTO AdventureWorks.dbo.VariableTest(Col1)

VALUES('$(tablename)');

GO

À l'invite de commandes sqlcmd, si aucune variable n'a la valeur $(tablename), les instructions suivantes retournent la ligne.

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

Voici l'ensemble des résultats.

>1 Col1

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

>3 $(tablename)

>4

>5 (1 rows affected)

La variable MyVar prend la valeur $(tablename).

>6 :setvar MyVar $(tablename)

Ces instructions retournent la ligne ainsi que le message « La variable de script « tablename » n'est pas définie ».

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

>7 GO

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

>2 GO

Ces instructions retournent la ligne.

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

>2 GO

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

>2 GO

Historique des modifications

Version Historique

17 juillet 2006

Nouveau contenu :
  • Ajout des exemples.

Ajouts de la communauté

AJOUTER
Afficher:
© 2014 Microsoft