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.
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