如何动态创建 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 中。
我正在使用 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 中。