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.


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 .


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.