2017-05-11 12 views
1

どのようにWHERE句に値を設定できますか?私はSQL Server MSを使用しています。WHERE句のSET値

DECLARE @Value INT; 

SOMEPOINT: 

INSERT $(TempTable)(Value, ...) 
SELECT DISTINCT @Value, ... 
FROM $(TempTable) t1 
JOIN $(TempTable) t2 ON 
    t2.smth1 = t1.smth2 

WHERE 
    @Value = CASE WHEN t1.Value IS NULL THEN t2.Value ELSE t1.Value // so i want here to set the @Value value instead of ckecking it 
     END 

IF @@ROWCOUNT > 0 GOTO SOMEPOINT 

私は多くのことを試しましたが、何も助けられませんでした。 WHERE節の中でこれを行うことが不可能な場合、私は何を変えるべきですか?

+2

これは何DBMSのですか? –

答えて

2

あなたはWHERE句内の変数を設定することはできませんが、値を計算の式を使用することができます。これは、挿入のために、それが対象となって、あなたのSELECT DISTINCT句のValue「計算列」を作る

INSERT $(TempTable)(Value, ...) 
SELECT DISTINCT 
    CASE WHEN t1.Value IS NULL THEN t2.Value ELSE t1.Value END AS Value 
, ... 
FROM $(TempTable) t1 
JOIN $(TempTable) t2 ON 
    t2.smth1 = t1.smth2 

を。

注:NULLのデフォルト値(Gordon Linoff)を提供する場合COALESCEが状況でより適切である

INSERT $(TempTable)(Value, ...) 
SELECT DISTINCT 
    COALESCE(t1.Value, t2.Value) AS Value 
, ... 
FROM $(TempTable) t1 
JOIN $(TempTable) t2 ON 
    t2.smth1 = t1.smth2 
+1

ええ、それは助け!ありがとう! –

+0

OPは 'CASE'の代わりに' COALESCE() 'を使うべきです。 –

+0

@ GordonLinoffありがとう、あなたのコメントをありがとう! – dasblinkenlight