MERGE SQL代码无法正常工作

问题描述:

我想知道是否有人可以提供帮助。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。 –

试试这个:

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的表别名。 –