0

我正在使用 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 语句创建表一样。

我也试过这个:

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
4

1 回答 1

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 仍然会抱怨 ##T3 已经存在于 ELSE 语句的 SELECT INTO 中。

于 2018-03-07T22:50:39.313 回答