我有两个表,一个是(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中更新..
请问任何人请看这个问题.. 或任何其他方式进行这种检查
答案 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 来发现是否存在非空值。