在SQLCMD模式下设置变量


13

使用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的值。


不是我知道的,或者可以弄清楚的。

1
您所要求的本身是不可能的,因为sqlcmd变量是在将sql发送到服务器之前由客户端评估的。因此,您要求sql server设置它从未看到的变量的值。在带有sqlcmd变量的sql脚本上运行sql profiler跟踪,您将看到它们已经全部评估。
蒂姆·阿贝尔

Answers:


9

我认为您需要将结果输出到文件中并带回去。这样的事情应该可以帮助您接近要查找的内容:

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

您可以在此处看到更多示例


谢谢。我已经离开工作了,所以我将在周一尝试您的建议
Craig Efrein

我已经更新了我的问题
Craig Efrein

事实证明,这个答案是最有用的。
Craig Efrein

1
我想这里重要的部分是您必须具有单独的批处理才能:1)生成SETVAR文件,2)执行该文件以初始化脚本变量,最后,3)使用脚本变量。
Andriy M
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.