Configurando variáveis ​​no modo SQLCMD

13

Usando o SQL Server 2008 R2 Enterprise Edition

Considere a seguinte declaração:

:setvar source_server_name "SERVERNAME\INSTANCENAME"

É possível no modo SQLCMD obter esse valor usando TSQL

Algo como: :setvar source_server_name = SELECT @@servername

Obrigado

Atualização 15/07/2013

As duas respostas oferecidas abaixo não deram o resultado desejado, então estou adicionando um exemplo mais relevante.

:setvar source_server_name [myserver]

A variável source_server_name está configurada para a sequência de texto [myserver_1]

Eu gostaria de poder fazer isso:

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

A variável source_server_name seria configurada para o valor no servidor para o ID 1.

Craig Efrein
fonte
Não que eu esteja ciente, ou possa descobrir.
1
O que você solicita não é possível per se, porque as variáveis ​​sqlcmd são avaliadas pelo cliente antes que o sql seja enviado ao servidor. Então você está pedindo ao servidor sql para definir o valor de uma variável que ele nunca vê. Execute um rastreamento do sql profiler em um script sql com variáveis ​​sqlcmd e você verá que todas elas já foram avaliadas.
precisa

Respostas:

9

Acho que você precisa exibir seus resultados em um arquivo e trazê-los de volta. Algo assim deve ajudar você a se aproximar do que está procurando:

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

Você pode ver mais exemplos aqui .

SQLRockstar
fonte
Obrigado. Ive trabalho já deixou isso vou tentar a sua sugestão na segunda-feira
Craig Efrein
Eu atualizei minha pergunta
Craig Efrein
Esta resposta provou ser a mais útil.
Craig Efrein
1
Eu acho que a parte importante aqui é que você precisa ter lotes separados para 1) gerar o arquivo SETVAR, 2) executá-lo para inicializar a variável de script e, finalmente, 3) usar a variável de script.
Andriy M