我正在使用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
答案 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。