如何在FROM语句中使用变量来更改服务器



我有3台服务器,需要1个脚本来查询它们。为此,我想使用以下参数:

通过这种方式,我可以简单地传递服务器的更改部分,而不是创建3个脚本。

这个例子中我的服务器被称为:

[AAA-SERVER-01]
[BBB-SERVER-01]
[CCC-SERVER-01]
DECLARE @server1 VARCHAR(3) = 'AAA'
DECLARE @server2 VARCHAR(3) = 'BBB'
DECLARE @server3 VARCHAR(3) = 'CCC'
SELECT *
FROM [@server1-SERVER-01].DB.dbo.TABLE T1

如何在FROM中使用这样的变量。我想使用下面这样的CONCAT,但它感觉不对,尤其是在尝试加入时。有什么很酷的方法吗?

SELECT *
FROM (SELECT CONCAT('[',@server1,'-SERVER-01].DB.dbo.TABLE T1' ) )

不能使用参数来替换文字,对象名必须是文字。为此,您需要使用动态SQL,例如:

DECLARE @SQL nvarchar(MAX) = N'SELECT * FROM ' + QUOTENAME(@server1 + N'-SERVER-01') + N'.DB.dbo.[TABLE] T1;';
EXEC sys.sp_executesql @SQL;

考虑从SSMS使用SQLCmd模式,将脚本保存到文件中,然后执行:

:CONNECT [AAA-SERVER-01]
USE DB1;
:r C:SqlScriptYourScript.sql
GO
:CONNECT [BBB-SERVER-01]
USE DB1;
:r C:SqlScriptYourScript.sql
GO
:CONNECT [CCC-SERVER-01]
USE DB1;
:r C:SqlScriptYourScript.sql
GO

相关内容

最新更新