合并条件在sql server

时间:2017-06-17 05:53:45

标签: 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
    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值 - 如果nmp值是tmpProviderLoc中的新值,则它不会在ProviderLoc中更新..

请问任何人请看这个问题.. 或任何其他方式进行这种检查

1 个答案:

答案 0 :(得分:2)

这里的等号是不正确的:当TPL。[NPI] = NULL那么PL。[NPI]

使用 IS NULL

WHEN TPL.[NPI] IS NULL THEN PL.[NPI]

NULL是特殊的。它们是“不确定的”,因此它们不能平等或不等于任何纯粹因为它们不具有任何“确定”的价值。 NULL表示缺少值,等于/不等于不适用。

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