使用链接服务器变量将查询转换为动态 SQL
Converting a query to dynamic SQL with linked server variable
我有一个需要转换的存储过程,以便它从 table 读取链接服务器变量。据我所知,这样做的唯一方法是使用动态 SQL。问题是我无法转换我的查询。
原始查询:
SET @var1 = ''
SELECT @var1 = RECEIVER
FROM databse1.dbo.table1
WHERE SAPNUMBER = @var2
转换后的查询:
SET @srv = (SELECT server_name
FROM Configuration.dbo.Server_Switch)
SET @var1 = ''
exec (
'SELECT ' + @var1 + '= RECEIVER
FROM ' + @srv + '.databse1.dbo.table1
WHERE SAPNUMBER =' + @var2
)
我得到的错误是:
Incorrect syntax near '='
@var1 和@var2 是预先声明的变量。我很确定在为动态 SQL 中的这些变量赋值时存在问题,因此出现“=”错误。我可以在转换此查询时获得一些帮助吗?
请提供更多信息。我们需要变量@var2、@var1 声明、变量类型。如果@var2 是 varchar,请按以下方式更新您的查询:
declare @sql nvarchar(4000) =
'SELECT ' + @var1 + '= RECEIVER
FROM ' + @srv + '.databse1.dbo.table1
WHERE SAPNUMBER =' + char(39) + @var2 + char(39);
exec(@sql);
P.S。如果@var2 数字:
declare @sql nvarchar(4000) =
'SELECT ' + @var1 + '= RECEIVER
FROM ' + @srv + '.databse1.dbo.table1
WHERE SAPNUMBER =' + @var2;
exec(@sql);
解决它的一种方法是使用带有输出参数的sp_executeSql:
SET @srv = (SELECT server_name
FROM Configuration.dbo.Server_Switch)
DECLARE @sql nvarchar(500),
@ParmDefinition nvarchar(500);
SET @sql =
'SELECT @output = RECEIVER
FROM ' + @srv + '.databse1.dbo.table1
WHERE SAPNUMBER =' + @var2
SET @ParmDefinition = N'@var1 varchar(100) OUTPUT';
EXEC sp_executesql @Sql, @ParmDefinition, @var1=@output OUTPUT;
我有一个需要转换的存储过程,以便它从 table 读取链接服务器变量。据我所知,这样做的唯一方法是使用动态 SQL。问题是我无法转换我的查询。
原始查询:
SET @var1 = ''
SELECT @var1 = RECEIVER
FROM databse1.dbo.table1
WHERE SAPNUMBER = @var2
转换后的查询:
SET @srv = (SELECT server_name
FROM Configuration.dbo.Server_Switch)
SET @var1 = ''
exec (
'SELECT ' + @var1 + '= RECEIVER
FROM ' + @srv + '.databse1.dbo.table1
WHERE SAPNUMBER =' + @var2
)
我得到的错误是:
Incorrect syntax near '='
@var1 和@var2 是预先声明的变量。我很确定在为动态 SQL 中的这些变量赋值时存在问题,因此出现“=”错误。我可以在转换此查询时获得一些帮助吗?
请提供更多信息。我们需要变量@var2、@var1 声明、变量类型。如果@var2 是 varchar,请按以下方式更新您的查询:
declare @sql nvarchar(4000) =
'SELECT ' + @var1 + '= RECEIVER
FROM ' + @srv + '.databse1.dbo.table1
WHERE SAPNUMBER =' + char(39) + @var2 + char(39);
exec(@sql);
P.S。如果@var2 数字:
declare @sql nvarchar(4000) =
'SELECT ' + @var1 + '= RECEIVER
FROM ' + @srv + '.databse1.dbo.table1
WHERE SAPNUMBER =' + @var2;
exec(@sql);
解决它的一种方法是使用带有输出参数的sp_executeSql:
SET @srv = (SELECT server_name
FROM Configuration.dbo.Server_Switch)
DECLARE @sql nvarchar(500),
@ParmDefinition nvarchar(500);
SET @sql =
'SELECT @output = RECEIVER
FROM ' + @srv + '.databse1.dbo.table1
WHERE SAPNUMBER =' + @var2
SET @ParmDefinition = N'@var1 varchar(100) OUTPUT';
EXEC sp_executesql @Sql, @ParmDefinition, @var1=@output OUTPUT;