SQL:如何在这种情况下设置变量?

时间:2019-02-14 17:25:56

标签: sql sql-server

我正在尝试设置几个变量,一个是表的名称(@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

任何帮助将不胜感激。 非常感谢, 恩里科

2 个答案:

答案 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值之一来构建表变量,因为我也无法传递正确的表名

非常感谢, 恩里科