简体   繁体   English

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

[英]Run stored procedure on linked server (linked server name as variable)

I have a script and its works well: 我有一个脚本,它运行良好:

DECLARE @RunSPSQL VARCHAR(60);

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

EXEC (@RunSPSQL) AT LNK_SERVER_NAME;

Now I would like to change linked server name to variable, something like this: 现在,我想将链接服务器的名称更改为变量,如下所示:

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;

But it doesn't work: 但这不起作用:

Incorrect syntax near '@LNK_Name' '@LNK_Name'附近的语法不正确

I was looking for a solution, but no success for now. 我一直在寻找解决方案,但目前没有成功。

If anyone, please help. 如果有人,请帮忙。

You can't use a variable to replace the name of an object. 您不能使用变量来替换对象的名称。 Instead you need to use some dynamic SQL to achieve this: 相反,您需要使用一些动态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;

Just ensure you quote the linked server's name to avoid any injection. 只需确保引用链接服务器的名称即可避免注入。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM