Définition de variables en mode SQLCMD

13

Utilisation de SQL Server 2008 R2 Enterprise Edition

Considérez l'énoncé suivant:

:setvar source_server_name "SERVERNAME\INSTANCENAME"

Est-il possible en mode SQLCMD d'obtenir cette valeur en utilisant TSQL

Quelque chose comme: :setvar source_server_name = SELECT @@servername

Je vous remercie

Mise à jour 15/07/2013

Les deux réponses ci-dessous n'ont pas donné le résultat souhaité, j'ajoute donc un exemple plus pertinent.

:setvar source_server_name [myserver]

La variable nom_serveur_source est définie sur la chaîne de texte [myserver_1]

J'aimerais pouvoir faire ceci:

create table #tmp(
id int identity(1,1),
server sysname
)

insert into #tmp values('myserver_1'),('myserver_2');

:setvar source_server_name = SELECT server FROM #tmp WHERE id = 1

select '$(source_server_name)' 

(No column name)
myserver_1

La variable nom_serveur_source serait définie sur la valeur du serveur pour l'ID 1.

Craig Efrein
la source
Pas que je sache ou pourrais comprendre.
1
Ce que vous demandez n'est pas possible en soi, car les variables sqlcmd sont évaluées par le client avant que le sql soit envoyé au serveur. Vous demandez donc au serveur SQL de définir la valeur d'une variable qu'il ne voit jamais. Exécutez une trace du profileur sql sur un script sql avec des variables sqlcmd et vous verrez qu'elles ont toutes déjà été évaluées.
Tim Abell

Réponses:

9

Je pense que vous devez sortir vos résultats dans un fichier et les réintégrer. Quelque chose comme ça devrait vous aider à vous rapprocher de ce que vous recherchez:

:setvar MyDir "C:\scripts"
:OUT $(MyDir)\test.txt
PRINT ':SETVAR ServerName ''' + @@SERVERNAME + ''''
GO
:OUT stdout
:r $(MyDir)\test.txt
GO
SELECT $(ServerName)

Vous pouvez voir plus d'exemples ici .

SQLRockstar
la source
Je vous remercie. J'ai déjà quitté le travail, je vais donc essayer votre suggestion lundi
Craig Efrein
J'ai mis à jour ma question
Craig Efrein
Cette réponse s'est avérée la plus utile.
Craig Efrein
1
Je suppose que la partie importante ici est que vous devez avoir des lots séparés pour 1) générer le fichier SETVAR, 2) l'exécuter pour initialiser la variable de script et, enfin, 3) utiliser la variable de script.
Andriy M