如何动态创建TSQL表?

时间:2018-03-07 22:33:22

标签: ssms create-table global-temp-tables

我正在使用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> 0开始计数(*)。它仍然可以从第一个if语句创建表。

我也试过这个:

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

1 个答案:

答案 0 :(得分:1)

注意你可以使用IF / ELSE并且你永远不会得到小于0的COUNT

所以,你可以动态地做到这一点:

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语句之前删除表是不够的。 SSMS仍然会抱怨ELSE语句的SELECT INTO中已经存在## T3。