2016-06-14 4 views
1

既存のテーブルを別のテーブルのデータで更新する必要があります。私のCTEは私に正しい結果を与えているが、私はCTE SSMSで更新しようとしている場合は、以下の行でCTEによる更新でset句の列名が認識されない

Msg 102, Level 15, State 1, Line 13 
Incorrect syntax near '.'. 

または無効な列名に文句を言う:

set cm.Action.Identifier_fk = ID 
set cm.ActionRequestedAction = Action 
set cm.Action.apartment_fk = apartment_fk 

これはコードです:

Use DB; 
GO 

with CTE (ID,Action,Identifier_fk,apartment_fk) AS 

(select a.ID, a.Action, b.Identifier_fk, m.apartment_fk 
from Project.AllSent a (nolock) 
    left outer join cm.Action b (nolock) on a.ID=b.Identifier_fk 
    left Outer Join csv.Matching m (nolock) on m.Identifier_fk = a.ID 
    left outer join csv.Apartment p (nolock) on m.apartment_fk=p.apartment_pk 
    where b.Identifier_fk is NULL) 

update cm.Action 
set cm.Action.Identifier_fk = ID 
set cm.Action.RequestedAction = Action 
set cm.Action.apartment_fk = apartment_fk 

    from CTE c 
    JOIN Project.AllSent t (nolock) on t.ID=c.ID; 
+0

'update'クエリで' cm.Action'とは何ですか? –

+0

cm - スキーマです。アクション - テーブルです。 – enigma6205

+0

SQL Serverを使用しているのでしばらくお待ちしていますが、複数のSET呼び出しを更新することはできますか?カンマで区切りますか? – gmiley

答えて

0

正しいupdate文は一つだけsetを持っています。また、from句にはcmがありません。私は、CTEを取り払うことを提案するつもりです:

update b 
    set Identifier_fk = a.ID, 
     Action.RequestedAction = a.Action, 
     apartment_fk = mm.apartment_fk 
    from Project.AllSent a (nolock) left join 
     cm.Action b (nolock) 
     on a.ID = b.Identifier_fk left join 
     csv.Matching m (nolock) 
     on m.Identifier_fk = a.ID left join 
     csv.Apartment p (nolock) 
     on m.apartment_fk = p.apartment_pk 
    where b.Identifier_fk is NULL; 

私は最終的joinが必要だとは思いません。

+0

私もそうだと思います。 – enigma6205

+0

結合のFrom句に[cm]があります。あなたは正確に何を指していますか? – enigma6205

+0

理由はありませんが、これは0行を更新します...何か考えていますか? (0行が影響を受ける) – enigma6205

関連する問題