日期:2014-05-18  浏览次数:20487 次

Exec()中的问题,请高手指教!
Declare   @MaxLotNo   tinyint,   @ProductionTable   sysname
……
exec   ( 'Select   @MaxLotNo   =   Max(Cast(SubString([LotNo],   4,   2)   As   tinyint))   From   '   +   @ProductionTable   +   '   Where   Left([LotNo],   3)   =   @getLotNo   And   Right([LotNo],   1)   =   Right(Str(Year(GetDate())),   1) ')
注:在Exec执行之前@ProductionTable已经赋值(一个表名)。

执行的Exec()语句时提示:
必须声明标量变量   "@MaxLotNo "。

我反复调试都不行,拿来让熟手看看。谢谢了!

------解决方案--------------------
Declare @MaxLotNo tinyint, @ProductionTable sysname
declare @sql nvarchar(1000),@getLotNo varchar(10) /*声明变量*/
set @sql = N 'Select @MaxLotNo = Max(Cast(SubString([LotNo], 4, 2) As tinyint)) From ' + @ProductionTable + N ' Where Left([LotNo], 3) = @getLotNo And Right([LotNo], 1) = Right(Str(Year(GetDate())), 1) '
----执行
EXEC sp_executesql @sql,N '@MaxLotNo tinyint OUTPUT,@getLotNo varchar(10) ',@MaxLotNo,@getLotNo
----获得变量值
SELECT @MaxLotNo