合并联接无法在varchar列上正确联接

时间:2018-11-11 23:26:39

标签: tsql

我创建了以下代码以使用merge实现SCD类型2,当我运行代码时,我在csname字段上遇到了主键冲突。我将以下值作为主键的一部分,不确定合并SQL是否支持varchar。 如果我在同一键上运行普通的内部联接SQL,那么我也将获得匹配的记录。

非常感谢任何帮助

csname ER-建筑投诉 TR-建筑应用

CREATE PROCEDURE dbo.load_target
AS

BEGIN 
    INSERT INTO [TR_DW].[enum].[Rt]([csname],[enddatetime],[EffectiveToDate],[EffectiveFromDate],[CurrentRecord])
    SELECT[csname],[enddatetime],[EffectiveToDate],[EffectiveFromDate],[CurrentRecord]
    FROM
    (

    MERGE [TR_DW].[enum].[Rt] RtCSQSuTT
    USING [TR].[enum].[Rt] RtCSQSuST
    ON (RtCSQSuTT.csname = RtCSQSuST.csname)

    WHEN NOT MATCHED THEN
    INSERT ([csname],[enddatetime],[EffectiveToDate],[EffectiveFromDate],[CurrentRecord])
    VALUES ([csname],[enddatetime],'12/31/9999', getdate(), 'Y')
    WHEN MATCHED AND RtCSQSuTT.[CurrentRecord] = 'Y' AND 
    (ISNULL(RtCSQSuTT.[enddatetime], '') != ISNULL(RtCSQSuST.[enddatetime], ''))THEN
     UPDATE SET 
     RtCSQSuTT.[CurrentRecord] = 'N', 
     RtCSQSuTT.[EffectiveFromDate] = GETDATE() - 1,
     RtCSQSuTT.[EffectiveToDate] = GETDATE() 
     OUTPUT $Action Action_Taken,RtCSQSuST.[csqname],RtCSQSuST.[enddatetime],'12/31/9999' AS[EffectiveToDate],GETDATE() AS[EffectiveFromDate],'Y' AS[CurrentRecord]
)AS MERGE_OUT21
WHERE MERGE_OUT21.Action_Taken = 'UPDATE';

END 
GO

0 个答案:

没有答案