Configuración de variables en modo SQLCMD

13

Uso de SQL Server 2008 R2 Enterprise Edition

Considere la siguiente declaración:

:setvar source_server_name "SERVERNAME\INSTANCENAME"

¿Es posible en modo SQLCMD obtener ese valor usando TSQL

Algo como: :setvar source_server_name = SELECT @@servername

Gracias

Actualización 15/7/2013

Las dos respuestas que se ofrecen a continuación no dieron el resultado deseado, así que estoy agregando un examen más relevante.

:setvar source_server_name [myserver]

La variable source_server_name se establece en la cadena de texto [myserver_1]

Me gustaría poder hacer esto:

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 source_server_name se establecería en el valor en el servidor para id 1.

Craig Efrein
fuente
No es que yo sepa, o pueda resolverlo.
1
Lo que solicita no es posible per se, porque el cliente evalúa las variables sqlcmd antes de que el sql se envíe al servidor. Entonces está pidiendo que el servidor SQL establezca el valor de una variable que nunca ve. Ejecute un rastreo de perfilador sql en un script sql con variables sqlcmd y verá que ya se han evaluado.
Tim Abell

Respuestas:

9

Creo que necesita enviar sus resultados a un archivo y traerlos de vuelta. Algo como esto debería ayudarlo a acercarse a lo que está buscando:

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

Puedes ver más ejemplos aquí .

SQLRockstar
fuente
Gracias. Ya he dejado el trabajo, así que probaré tu sugerencia el lunes
Craig Efrein
He actualizado mi pregunta
Craig Efrein
Esta respuesta resultó ser la más útil.
Craig Efrein
1
Supongo que la parte importante aquí es que debe tener lotes separados para 1) generar el archivo SETVAR, 2) ejecutarlo para inicializar la variable de script y, finalmente, 3) usar la variable de script.
Andriy M