【发布时间】:2015-12-31 10:04:47
【问题描述】:
Declare @SKUCode1 varchar(30), @SKUCode2 varchar(30), @SKUCode3 varchar(30),
@SKUCode4 varchar(30), @SKUCode5 varchar(30), @SKUCode6 varchar(30),
@SKUCode7 varchar(30), @SKUCode7 varchar(30), @SKUCode8 varchar(30),
@SKUCode10 varchar(30), @Temp_SKU varchar(30), @SKUCodeS varchar(30),
@sp1 nvarchar(max),@Index int
Set @SKUCodeS = 'SKUCode'
Set @Index = 0
While @Index < 10
Begin
Set @Index = @Index + 1
Select @Temp_SKU = SKUCode
From dbo.UDA_Order
Where Areaname = 'LMC-TYRE BUILDING'
Set @sp1 = 'Set'+' '+ @SKUCodeS+CONVERT(varchar,@Index)+' '+'='+' '+'@Temp_SKU'
Exec sp_executesql @sp1
End
这是抛出错误
消息 137,第 15 级,状态 2,第 1 行
必须声明标量变量“@Temp_SKU”
我不知道为什么会这样。
请帮忙。
【问题讨论】:
-
变量是特定范围的本地变量。
Exec在 new 范围内运行代码。使用这些变量,您无法在此处实现您想要做的事情。您要解决什么问题? -
这里还有其他问题 - 这可能只是由于您在发布之前简化了代码 - 但也会引发危险信号 - 例如设置
@Temp_SKU的SELECT似乎并不依赖于循环。如果只有一行匹配WHERE子句,那么在循环中执行它是多余的。如果有多行,则无法保证每次将使用哪些行值来完成分配。一行可以全部使用十次,但这绝不能保证,而且可能不是所需的行为。 -
@Damien_The_Unbeliever - 我想获取参数“@SKUCode1”到“@SKUCode10”的值,在每次执行循环时,“@Temp_SKU”中的值应该移动到“@SKUCodeX”中X 是循环索引
标签: sql-server