2016-08-25 161 views
0

我想知道是否有人可以提供幫助。MERGE SQL代碼無法正常工作

我在我的存儲過程中有這段代碼,但合併不適用於字段地址。適用於其他領域。

我有一個源文件,其中包含要填充到源的所有地址。

Source包含一個包含所有地址的字段。當我運行查詢時,「目標地址」列只填寫具有正確地址的一行。我可以看到源中存在位置更改,地址位置已更新爲該行,但不是表中其餘的屬性。

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

嘗試直接先執行MERGE語句(不含動態SQL),並告訴我們究竟是什麼 '不工作' 的意思。 – 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的表別名。 –