declare @qry as varchar(max)
declare @db as varchar(25)
declare @item as varchar(25)
declare @U_Parentcode as varchar(25)
set @U_Parentcode ='CDM51306520'
set @db ='Marda_Test'
set @qry ='select @item =itemcode from ' + @db + '.[dbo].[OITM] where ItemCode=''' + @U_Parentcode +''''
execute (@qry)
print @item
我收到的错误如'必须声明标量变量'@item“。'
答案 0 :(得分:3)
动态sql在与代码上下文不同的上下文中执行,因此基本上没有在那里声明@item
变量。
您需要使用sp_executeSql
,其中包含将变量映射到块中变量的机制。语法很简单,但是当你习惯它时很明显。
declare @qry as nvarchar(max)
declare @db as varchar(25)
declare @outsideItem as varchar(25)
declare @U_Parentcode as varchar(25)
set @U_Parentcode ='CDM51306520'
set @db ='Marda_Test'
set @qry ='select @insideItem =itemcode from ' + @db + '.[dbo].[OITM] where ItemCode=''' + @U_Parentcode +''''
execute sp_executesql @qry, N'@insideItem varchar(25) output', @insideItem = @outsideItem output
print @item
第一个参数是查询,与exec()
相同
第二个参数是查询中使用的所有参数的声明,在您的情况下为@insideItem
第三个(以及任何后续)参数是一个映射,它指出哪个内部参数应该映射到哪个外部参数。
输出子句(在变量声明和映射上使用)是一个指示符,该参数用作查询的输出值。
答案 1 :(得分:0)
declare
内容中未包含@qry
个语句。
另外,为什么你甚至打扰execute
?
为什么不使用普通查询。参数化您的连接字符串,以便连接到正确的数据库并运行普通查询。