我有两个临时表,比如#t1
在#t2
Sql Server 2008 中。我需要创建#t3
如下:
- 当
#t1
有行,无所谓#t2
的内容,#t3
=select * from #t1
- 当
#t1
没有行时,#t3
=select * from #t2
我们可以假设#t1
并#t2
拥有相同的列,但我认为我不想依赖这个事实。
我在想一些从 ' ' 语句中提取一些逻辑的东西if exists (select * ...)
,但是像某种 bool 运算符这样的东西不会更好吗?
我有两个临时表,比如#t1
在#t2
Sql Server 2008 中。我需要创建#t3
如下:
#t1
有行,无所谓#t2
的内容,#t3
=select * from #t1
#t1
没有行时,#t3
=select * from #t2
我们可以假设#t1
并#t2
拥有相同的列,但我认为我不想依赖这个事实。
我在想一些从 ' ' 语句中提取一些逻辑的东西if exists (select * ...)
,但是像某种 bool 运算符这样的东西不会更好吗?
最简单的方法是将逻辑实现为:
if (exists (select * from #t1))
begin
select *
into #t3
from #t1;
end;
else
begin
select *
into #t3
from #t2;
end;
您可以在一个语句中执行此操作:
select t.*
into #t3
from ((select *
from #t1
)
union all
(select *
from #t2
where not exists(select * from #t1)
)
) t
但是,我认为显式if
是表达您意图的更清晰的方式。
该查询将执行此操作,将查看中是否有行,在这种情况下使用 的内容t1
填充表,前提是它们具有相同的列,否则使用 的内容填充。t3
t1
t3
t2
IF(select count(*) from t1) > 0
BEGIN
select * into t3 from t1
END
ELSE
BEGIN
select * into t3 from t2
END
这是一个SQLFiddle,因此您可以看到它是如何工作的。要测试t1
没有任何行的情况,只需删除插入的行t1
,重建模式并重新运行查询。