0

私はこのクエリを持っています:

INSERT INTO #t1 (VALUE1, VALUE2)
SELECT 
CASE
WHEN EXISTS(SELECT * FROM T2)
THEN SELECT VALUE1, VALUE2 FROM T2
END

これは機能しません。「INSERTステートメントの選択リストには、挿入リストよりも少ない項目が含まれています。SELECT値の数はINSERT列の数と一致する必要があります。」

代わりに私は使用する必要があります:

INSERT INTO #t1 (VALUE1, VALUE2)
SELECT 
CASE
WHEN EXISTS(SELECT * FROM T2)
THEN SELECT VALUE1 FROM T2
END

CASE
WHEN EXISTS(SELECT * FROM T2)
THEN SELECT VALUE2 FROM T2
END

ただし、これによりパフォーマンスが低下します。それを適切に行うための解決策はありますか?単一のCASE内で、2番目のテーブルt2の単一クエリの恩恵を受ける。

4

4 に答える 4

1

EXISTS(SELECT * FROM T2) は何もせず、構文が間違っています

これを試して:

INSERT INTO #t1 (VALUE1, VALUE2)
SELECT VALUE1, VALUE2 FROM T2

これも有効ですが、あまり役に立ちませんが、あなたがやろうとしていることのようです:

INSERT INTO #t1 (VALUE1, VALUE2)     
SELECT VALUE1, VALUE2 FROM T2
WHERE exists (SELECT 1 FROM T2)
于 2012-09-21T12:41:26.053 に答える
0

次のようなものを使用できませんでしたか

  INSERT INTO #t1 (VALUE1, VALUE2)
  SELECT value1, value2 from #t2 WHERE NOT (value1 IS NULL AND value2 IS NULL)

代わりは?

そうでなければあなたの意図は

  INSERT INTO #t1 (VALUE1)
  SELECT CONCAT(value1, value2) from t2 Couldn't you use something like 

  INSERT INTO #t1 (VALUE1, VALUE2)
  SELECT value1, value2 from t2 WHERE NOT (value1 IS NULL AND value2 IS NULL)

代わりは?

そうでなければあなたの意図は

  INSERT INTO #t1 (VALUE1)
  SELECT value1, value2 from #t2 WHERE NOT (value1 IS NULL AND value2 IS NULL)

これにより、t2.value2 が null の場合、「t2.value2」が t1.value1 に挿入されます。

于 2012-09-21T12:43:56.400 に答える
0

なぜだめですか:

INSERT INTO #t1 (VALUE1, VALUE2)
SELECT VALUE1, VALUE2 FROM T2

T2 に行がない場合、#t1 には何も挿入されません。

于 2012-09-21T12:41:33.127 に答える
0

単純化するだけです:

INSERT INTO #t1 (VALUE1, VALUE2)
SELECT VALUE1, VALUE2
FROM T2

行がない場合は、ここでも何もしません。そのための特別なテストを行う必要はありません。

于 2012-09-21T12:41:56.113 に答える