如何动态创建 TSQL table?

How to dynamically Create TSQL table?

我正在使用 SSMS 2012 并想做这样的事情:

If(Select count(*) from T1) > 0 
Begin
Select * into ##T3 from T2
end

If(Select count(*) from T1) < 0 
Begin
Select * into ##T3 from T4
end

创建逻辑后,技术上我应该只构建 T3 一次,但我不断收到错误消息,提示 ##T3 无法创建,因为它已经存在。即使来自 T1 的 count(*) >0。就像它仍在从第一个 if 语句创建 table。

我也试过这个:

If(Select count(*) from T1) > 0 
Begin
IF OBJECT_ID('tempdb..##T3') is not null Drop Table ##T3
Select * into ##T3 from T2
end

If(Select count(*) from T1) < 0 
Begin
IF OBJECT_ID('tempdb..##T3') is not null Drop Table ##T3
Select * into ##T3 from T4
end

请注意,您可以使用 IF/ELSE,并且您获得的 COUNT 永远不会小于 0

因此,您可以动态执行此操作:

IF(SELECT COUNT(*) FROM T1) > 0 
BEGIN
    EXEC('SELECT * INTO ##T3 FROM T2')
END
ELSE
BEGIN
    EXEC('SELECT * INTO ##T3 FROM T4')
END

或者,或者:

IF(SELECT COUNT(*) FROM T1) > 0 
BEGIN
    IF OBJECT_ID('tempdb..##T3') IS NOT NULL DROP TABLE ##T3
    SELECT * INTO ##T3 FROM T2
END
ELSE
BEGIN
    IF OBJECT_ID('tempdb..##T3') IS NOT NULL DROP TABLE ##T3
    SELECT * INTO ##T3 FROM T4
END

请注意,尝试在 if/else 语句之前删除 table 是不够的。 SSMS 仍然会抱怨 ##T3 已经存在于 ELSE 语句的 SELECT INTO 中。