在 SQLCMD 模式下设置变量

Cra*_*ein 14 sql-server sql-server-2008-r2 sqlcmd

使用 SQL Server 2008 R2 企业版

考虑以下语句:

:setvar source_server_name "SERVERNAME\INSTANCENAME"
Run Code Online (Sandbox Code Playgroud)

是否可以在 SQLCMD 模式下使用 TSQL 获取该值

就像是: :setvar source_server_name = SELECT @@servername

谢谢

2013 年 7 月 15 日更新

下面提供的两个答案并没有给出理想的结果,所以我添加了一个更相关的例子。

:setvar source_server_name [myserver]
Run Code Online (Sandbox Code Playgroud)

变量 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
Run Code Online (Sandbox Code Playgroud)

变量 source_server_name 将设置为 ID 1 的服务器中的值。

SQL*_*tar 10

我认为你需要将你的结果输出到一个文件中并将它们带回来。像这样的东西应该可以帮助你接近你正在寻找的东西:

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

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