0

#t1たとえば、#t2Sql Server 2008 には 2 つの一時テーブルがあります。次#t3のように作成する必要があります。

  • の内容に関係なく、#t1行がある場合、 =#t2#t3select * from #t1
  • #t1行がない場合#t3=select * from #t2

同じ列を仮定#t1#t2て持つことができますが、その事実に頼りたいとは思いません。

' ' ステートメントから何らかのロジックを引き出す何かを考えてif exists (select * ...)いましたが、ある種のブール演算子のようなものはありませんか?

4

2 に答える 2

2

最も簡単な方法は、ロジックを次のように実装することです。

if (exists (select * from #t1))
begin
    select *
    into #t3
    from #t1;
end;
else
begin
    select *
    into #t3
    from #t2;
end;

次のように 1 つのステートメントでこれを行うことができます。

select t.*
into #t3
 from ((select *
        from #t1
       )
       union all
       (select *
        from #t2
        where not exists(select * from #t1)
       )
      ) t

ifただし、明示的な方が意図を表現するためのより明確な方法だと思います。

于 2013-07-18T16:08:44.943 に答える
0

このクエリはまさにそれを行い、 に行があるかどうかを確認し、同じ列がある場合は の内容をt1テーブルに入力し、それ以外の場合は の内容を入力します。t3t1t3t2

IF(select count(*) from t1) > 0 
    BEGIN 
        select * into t3 from t1
    END
ELSE
    BEGIN
        select * into t3 from t2
    END

ここにSQLFiddleがあるので、それがどのように機能するかを見ることができます。t1に行がない場合をテストするには、 に挿入する行を削除しt1、スキーマを再構築して、クエリを再実行します。

于 2013-07-18T16:08:30.500 に答える