gpt4 book ai didi

sql server : MERGE has unexpected results

转载 作者:行者123 更新时间:2023-12-04 13:49:36 24 4
gpt4 key购买 nike

这些行第一次进入目标表的方式通常是用稀疏的列填充大部分文本数据,其余列设置为 NULL。在随后的传递中,新数据填充现有的已知(非空)和未知(空)数据。我已经确定新数据 (#pld) 确实包含不同的数据。数据似乎没有变化。这是我拥有的:

  BEGIN TRANSACTION

BEGIN TRY


MERGE INTO [metro].listings AS metroList
USING #pld as listnew
ON metroList.id = listnew.id
AND metroList.sid = listnew.sid
WHEN MATCHED AND (
metroList.User != listnew.User
or metroList.Email != listnew.Email
or metroList.LocName != listnew.LocName
) THEN
UPDATE SET
metroList.User = listnew.User,
metroList.Email = listnew.Email,
metroList.LocName = listnew.LocName,
WHEN NOT MATCHED THEN
INSERT
( User,
Email,
LocName
)
VALUES
(
listnew.User,
listnew.Email,
listnew.LocName
);

COMMIT TRANSACTION

END TRY


IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;

END CATCH

我尝试用 <> 替换语句的更新部分下的 != to 。相同的结果。这必须与可能的(可能的)空值与字符串的比较有关——甚至可能是另一个空值?不管怎样,我呼吁所有的 sql-geeks 解决这个问题。

最佳答案

您也可以将选项与 NULLIF() 一起使用功能。

如果两个表达式不相等,则 NULLIF 返回第一个表达式。如果表达式相等,NULLIF 返回第一个表达式类型的空值。

WHEN MATCHED AND (
NULLIF(ISNULL(metroList.[User],''), listnew.[User]) IS NOT NULL
OR NULLIF(ISNULL(metroList.Email, ''), listnew.Email) IS NOT NULL
OR NULLIF(ISNULL(metroList.LocName, ''), listnew.LocName) IS NOT NULL
)
THEN

关于sql server : MERGE has unexpected results,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15373214/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com