我正在尝试设置几个变量,一个是表的名称(@table),另一个是字符串。
我收到了错误消息:
必须声明表变量“ @table”。
据我了解,这是因为我必须将@table用作表变量,但我只需要将其用作字符串
declare @a varchar(50);
declare @table varchar(100);
select @table =
case
WHEN Version = 'Advanced' THEN ("tableadv")
WHEN Version = 'Professional' THEN ("tablepro")
WHEN Version = 'Light' THEN ("tablelight")
WHEN Version = 'Short' THEN ("tableshort")
END
FROM partno where inpn=3
set @a = (select top (1) LicenseNumber from @table where used is null)
insert into seriali (LicenseNumber, idpn, serdgtrace)
select @a, 2, 'DAT-enrico'
update @table set used = 1 where LicenseNumber=@a
任何帮助将不胜感激。 非常感谢, 恩里科
答案 0 :(得分:0)
您不仅需要table
变量,还需要变量来存储更多具有更多列的值,而不仅仅是单个值:
declare @table table (
@col int,
. . .
)
insert into @table (col)
select case WHEN Version = 'Advanced' THEN 'tableadv'
WHEN Version = 'Professional' THEN 'tablepro'
WHEN Version = 'Light' THEN 'tablelight'
WHEN Version = 'Short' THEN 'tableshort'
end
from partno
where inpn = 3
答案 1 :(得分:0)
你好Yogesh,谢谢你的回答,
无论如何,我需要这种大小写结构来根据另一个表中的字段选择正确的表名。
然后我必须传递此值以更新正确的表;
set @a = (select top (1) LicenseNumber from @table where used is null)
update @table set used = 1 where LicenseNumber=@a
我不需要用记录中的case值之一来构建表变量,因为我也无法传递正确的表名
非常感谢, 恩里科