运行 链接服务器上的存储过程(链接服务器名称作为变量)
Run stored procedure on linked server (linked server name as variable)
我有一个脚本并且效果很好:
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;
但是没用:
Incorrect syntax near '@LNK_Name'
我一直在寻找解决方案,但目前没有成功。
如果有人,请帮助。
您不能使用变量来替换对象的名称。相反,您需要使用一些动态 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;
只需确保引用链接服务器的名称以避免任何注入。
我有一个脚本并且效果很好:
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;
但是没用:
Incorrect syntax near '@LNK_Name'
我一直在寻找解决方案,但目前没有成功。
如果有人,请帮助。
您不能使用变量来替换对象的名称。相反,您需要使用一些动态 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;
只需确保引用链接服务器的名称以避免任何注入。