使用SQL Server 2008 R2企业版
考虑以下语句:
:setvar source_server_name "SERVERNAME\INSTANCENAME"
是否可以在SQLCMD模式下使用TSQL获得该值
就像是: :setvar source_server_name = SELECT @@servername
谢谢
更新7/15/2013
下面提供的两个答案并没有给出理想的结果,因此我添加了一个更相关的示例。
:setvar source_server_name [myserver]
变量source_server_name设置为文本字符串[myserver_1]
我希望能够做到这一点:
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
变量source_server_name将设置为服务器中ID为1的值。
不是我知道的,或者可以弄清楚的。
您所要求的本身是不可能的,因为sqlcmd变量是在将sql发送到服务器之前由客户端评估的。因此,您要求sql server设置它从未看到的变量的值。在带有sqlcmd变量的sql脚本上运行sql profiler跟踪,您将看到它们已经全部评估。
—
蒂姆·阿贝尔