如果变量为null,如何更改表的结构

时间:2013-05-24 16:01:37

标签: sql sql-server

我正在从存储过程中选择一个表,如果我的一个变量为空,则返回不同的列。如何根据我的输入以不同方式声明表格?下面的代码传达了我正在尝试做的事情,但是如果我尝试这样做,我会收到一个错误,我正在宣告该表两次。

IF @Input IS NOT NULL BEGIN
DECLARE @tbl AS TABLE (
    Var1 FLOAT,
    Var2 DATETIME,
    VAR3 INt,
    ...
)
END
ELSE
DECLARE @tbl AS TABLE(
    Var1 INT,
    Var2 FLOAT,
    Var3 DATETIME,
    ...
)

2 个答案:

答案 0 :(得分:2)

使用两个不同的表变量... @stage,@ stage1。

答案 1 :(得分:2)

这是我能想到做的事情的唯一方式,而且不友好。您需要跳转范围以声明相同的变量表:

DECLARE @Input VARCHAR(5),@TableFields VARCHAR(1000)
SET @Input = NULL
BEGIN
IF @Input IS NOT NULL 
 SET @TableFields = 'Var1 FLOAT,Var2 DATETIME,VAR3 INt' 
ELSE     
 SET @TableFields = 'Var1 INT,Var2 FLOAT,Var3 DATETIME'
EXEC ('DECLARE @tbl AS TABLE ('+@TableFields+')
      INSERT INTO @tbl VALUES (''1'','''','''')
      SELECT * FROM @tbl

    ') 
END 

更容易使用2个表变量并根据您的IF逻辑指向每个变量,imo。