合并条件在sql server中不起作用
我有两个表,一个是(providerLoc),另一个是(tmpProviderLoc),我需要从tmpProviderLoc中获取三列组合,并需要检查providerLoc中存在的记录 案例1:如果providerLoc中存在记录,我需要根据tmpProviderLoc中的列(Npi)更新providerLoc中的另一列(Npi) 案例2:如果不存在,我需要在providerLoc中插入值 为此,我写了以下问题:合并条件在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
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。太好了。存储为空以便以后调用:)太好了。为空以便以后调用的存储:)