合并条件在sql server中不起作用

合并条件在sql server中不起作用,sql,sql-server,tsql,sql-server-2016,Sql,Sql Server,Tsql,Sql Server 2016,我有两个表,一个是(providerLoc),另一个是(tmpProviderLoc),我需要从tmpProviderLoc中获取三列组合,并需要检查providerLoc中存在的记录 案例1:如果providerLoc中存在记录,我需要根据tmpProviderLoc中的列(Npi)更新providerLoc中的另一列(Npi) 案例2:如果不存在,我需要在providerLoc中插入值 为此,我写了以下问题: MERGE INTO [dbo].[ProviderLoc] AS PL

我有两个表,一个是(providerLoc),另一个是(tmpProviderLoc),我需要从tmpProviderLoc中获取三列组合,并需要检查providerLoc中存在的记录

案例1:如果providerLoc中存在记录,我需要根据tmpProviderLoc中的列(Npi)更新providerLoc中的另一列(Npi)

案例2:如果不存在,我需要在providerLoc中插入值

为此,我写了以下问题:

MERGE INTO [dbo].[ProviderLoc]  AS PL
    USING
    (
       select *
from   (
   select *,
          row_number() over (partition by [Location_ID],[PProviderTaxID]
          ,[POBOXZIP] order by [Location_ID],[PProviderTaxID],[POBOXZIP]) as row_number
   from [dbo].[TmpProviderLoc]
       ) as rows
where row_number = 1
    ) AS TPL

        ON TPL.[Location_ID] = PL.[ecProviderID]
        AND TPL.[PProviderTaxID] = PL.[TaxID]
        AND TPL.[NPI] = PL.[NPI]
        AND TPL.[POBOXZIP] =  PL.[POBOXZIP]

        WHEN MATCHED THEN  
           UPDATE SET PL.[NPI] = CASE 
                                   WHEN TPL.[NPI] = NULL THEN PL.[NPI]
                                                        ELSE TPL.[NPI]  
                                END
        WHEN NOT MATCHED THEN  
        INSERT (EcProviderID,TaxID,NPI,POBOXZIP,ProviderLocationStatusID,CreatedON) 
        VALUES (TPL.[Location_ID],TPL.[PProviderTaxID],TPL.[NPI]
                ,TPL.[POBOXZIP],1,GETDATE());
但我无法更新NPI值——如果NPI值在tmpProviderLoc中是新的,则不会在ProviderLoc中更新

有人能调查一下这个问题吗。。
或者通过任何其他方式进行此类检查,其中的相等符号是不正确的:当TPL.[NPI]=NULL时,则PL.[NPI]

Use为空

WHEN TPL.[NPI] IS NULL THEN PL.[NPI] 当TPL[NPI]为空时,则PL[NPI] 空值是特殊的。它们是“不确定的”,因此它们不能等于或不等于任何东西,因为它们不能有任何“确定”的价值。空值表示没有值,相等/不相等不适用


要发现是否存在空值,请使用IS NULL-或-IS NOT NULL来发现是否存在非空值。

其中的相等符号不正确:当TPL。[NPI]=NULL时,则使用PL。[NPI]

Use为空

WHEN TPL.[NPI] IS NULL THEN PL.[NPI] 当TPL[NPI]为空时,则PL[NPI] 空值是特殊的。它们是“不确定的”,因此它们不能等于或不等于任何东西,因为它们不能有任何“确定”的价值。空值表示没有值,相等/不相等不适用


要发现是否存在空值,请使用IS NULL-或-IS NOT NULL来发现是否存在非空值。

如果没有样本数据,很难回答。请编辑您的问题,将样本数据包括为DDL+DML。没有样本数据很难回答。请编辑您的问题,将示例数据包括为DDL+DML。太好了。存储为空以便以后调用:)太好了。为空以便以后调用的存储:)