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