想要获得选定的价值

时间:2013-09-04 06:43:39

标签: sql-server-2008

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“。'

2 个答案:

答案 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? 为什么不使用普通查询。参数化您的连接字符串,以便连接到正确的数据库并运行普通查询。