2016-08-25 8 views
0

誰かが助けてくれるのだろうかと思っていました。MERGE SQLコードが正しく機能しない

私はこのコードを私のストアドプロシージャに持っていますが、MergeはフィールドAddressに対して機能していません。他の分野の作品。

ソースにはすべてのアドレスを入力するソースファイルがあります。

ソースには、すべてのアドレスを持つフィールドが含まれています。クエリを実行すると、[ターゲットアドレス]列に正しい行が1行だけ入力されます。ソースの場所の変更があったことがわかりました。アドレスのある場所はその行のために更新されましたが、テーブルの残りのプロパティは更新されませんでした。

DECLARE @SQLMerge nvarchar(4000) 
SET @SQLMerge=' MERGE '[email protected]+' AS target'+ 
        ' USING '[email protected]+' AS source 
        ON target.VersionEndDate IS NULL AND target.PtyId = source.PtyId 

WHEN MATCHED AND NOT (target.Location =source.Location AND target.Price=source.Price 
AND target.PtyCode=source.PtyCode 
AND target.[FloorSpace] = source.[FloorSpace] 
AND target.Address = source.Address) 


THEN UPDATE SET VersionEndDate ='''+CONVERT(NVARCHAR(50),@ReportMonthEND,121)+''';' 
IF @debug=1 print @SQLMerge 
EXECUTE sp_executesql @SQLMerge 
+0

は(動的SQLなし)に直接最初のMERGE文を実行し、手段は '動作していない' 正確に何を教えてみてください。 – qxg

+0

私はより詳細な説明で私の質問を編集しました。まだ明らかでない場合は教えてください。 – Camille

+0

'MERGE'ステートメントには' VersionEndDate'カラムを更新する構文しか含まれていないので、これはまったく予想されます。私はあなたのタグのリストにSQL Serverを追加します - 私はこれがSQL Serverだと仮定します。 –

答えて

0

これを試してみてください:

DECLARE @SQLMerge nvarchar(4000) 
SET @SQLMerge=' MERGE '[email protected]+' AS target'+ 
       ' USING '[email protected]+' AS source 
       ON target.VersionEndDate IS NULL AND target.PtyId=source.PtyId 

WHEN MATCHED AND NOT (target.Location =source.Location AND target.Price=source.Price 
AND target.PtyCode=source.PtyCode 
AND target.[FloorSpace] = source.[FloorSpace] 
AND target.Address = source.Address) 


THEN UPDATE SET target.VersionEndDate ='''+CONVERT(NVARCHAR(50),@ReportMonthEND,121)+''';' 
IF @debug=1 print @SQLMerge 
EXECUTE sp_executesql @SQLMerge 
+0

何を変更しましたか?ターゲットを追加します。 VersionEndDateに?私はこれを試みたが、うまくいかなかった。あなたが他の変更を加えた場合は私に知らせてください。多くのありがとう – Camille

+0

@ Camille、VersionEndDateを参照するためのテーブルエイリアスを追加しました。 –

関連する問題