在链接服务器上运行存储过程(链接服务器名称作为变量)

问题描述 投票:0回答:1

我有一个脚本,它运作良好:

DECLARE @RunSPSQL VARCHAR(60);

SET @RunSPSQL = 'EXEC master.dbo.sp_test';

EXEC (@RunSPSQL) AT LNK_SERVER_NAME;

现在我想将链接服务器名称更改为变量,如下所示:

DECLARE @RunSPSQL VARCHAR(60);
DECLARE @LNK_Name NVARCHAR(60);

SET @RunSPSQL = 'EXEC master.dbo.sp_test';
SET @LNK_Name = 'LNK_SERVER_NAME';

EXEC (@RunSPSQL) AT @LNK_Name;

但它不起作用:

'@LNK_Name'附近的语法不正确

我一直在寻找解决方案,但现在没有成功。

如果有人,请帮助。

sql sql-server tsql stored-procedures linked-server
1个回答
2
投票

您不能使用变量来替换对象的名称。相反,您需要使用一些动态SQL来实现此目的:

DECLARE @RunSPSQL varchar(60);
DECLARE @LNK_Name nvarchar(60);
DECLARE @SQL nvarchar(MAX);
SET @RunSPSQL = 'EXEC master.dbo.sp_test';
SET @LNK_Name = N'LNK_SERVER_NAME';

SET @SQL = N'EXEC (@RunSPSQL) AT ' + QUOTENAME(@LNK_Name) + N';';
EXEC sp_executesql @SQL, N'@RunSPSQL varchar(60)', @RunSPSQL = @RunSPSQL;

只需确保引用链接的服务器名称以避免任何注入。

© www.soinside.com 2019 - 2024. All rights reserved.