2016-09-07 10 views
-1

テーブル変数の更新中に問題が発生しました。私は、全体のクエリを実行すると、私はすでにそれを宣言した、しかし、私はこのエラーを取得:'。'の近くの構文が正しくありません。変数テーブルを更新中

UPDATE @List 
SET nrID = CASE 
       WHEN nrID IS NULL 
       THEN t1.nrID 
       ELSE nrID 
      END 
FROM @List 
INNER JOIN table1 t1 ON @List.PNr = t1.PNr 
INNER JOIN table2 t2 ON t1.n nrPNr = t2.nrPNr 
WHERE t1.PNr = t2.PNr AND t2.Isactive = 0 
...

Incorrect syntax near '.'.

をそして私はこの問題を解決するように見えることはできません

+2

は「List.nrID @ SET」ここからテーブル名を取り出してみてください、これを試してみてください、あなたはすでにあなたが更新しているものをテーブルにそれを言いました。 –

+3

table2に "O"のエイリアスを付けましたが、 "t2"のエイリアスに参加しています。あなたのコードには "t2"は定義されていません。 – JiggsJedi

+0

さらに、 'nrID'を' table1'に結びつけるなら、あなたのset/case文は冗長です。 '@List.nrID'は結合述語から決してヌルにはならず、nullはそれに何も参加できません平等のために評価することはできません。言い換えれば、 'table1'への内部結合により、すぐにヌル' @List.nrID'を持つすべての行が削除されます.--一致するすべての行が '@List.nrID'に更新されます。 – JiggsJedi

答えて

0

助けてくれてありがとうございました。宣言された@tableを@temptableを作成するように変更しました。

クエリはI Used(例)と同じです。

UPDATE Person 
    SET Car = ISNULL(@Car, Car), 
     HairColour = ISNULL(@HairColour, HairColour), 
1
UPDATE List 
SET List.nrID = t1.nrID 
FROM @List AS List 
INNER JOIN table1 t1 ON List.nrID = t1.nrID 
INNER JOIN table2 t2 ON t1.nrID = t2.nrID 
WHERE t1.nrID = t2.nrID AND t2.Isactive = 0 

として、コメントで述べたように、内部結合はあなたのケースでnullを取り除きます。

0

UPDATE L 
SET L.nrID = ISNULL(t1.nrID, t2.nrID) 
FROM @List L 
INNER JOIN table1 t1 ON L.PNr = t1.PNr 
INNER JOIN table2 t2 ON t1.nrPNr = t2.nrPNr 
WHERE t1.PNr = t2.PNr 
    AND t2.Isactive = 0 
関連する問題