這些行通常第一次進入目標表的方式是使用大量文本數據填充的列的稀疏數量,其餘列設置爲NULL。在隨後的傳遞中,新數據填充現有已知(非空)和未知(NULL)數據。我確定新數據(#pld)確實包含不同的數據。數據似乎沒有改變。下面是我有:sql server:MERGE有意想不到的結果
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
我試着更換=該聲明的更新部分根據與<>!相同的結果。這必須與可能的(可能的)空值與字符串的比較相關 - 甚至可能是另一個空值?無論如何,我打電話給所有的sql-geeks來解決這個問題。
看起來不正確我。 – 2013-03-13 07:22:41
ooops.My fault.NULLIF()函數在 的第一個值爲NULL時不起作用。在我的更新中,我使用ISNULL()進行了檢查。我再次對不起,感謝@Martin Smith +100500 – 2013-03-13 08:30:05