1

I'm selecting a table from a stored procedure which returns different columns if one of my variables is null vs. when it isn't. How do I declare a table differently based on one of my inputs? The code below communicates what I'm trying to do, but I get an error that I'm declaring the table twice if I try to do it this way.

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,
    ...
)
4

2 回答 2

2

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

于 2013-05-24T16:45:15.547 回答
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。

于 2013-05-24T16:47:42.757 回答