0
這個目前的工作,但我想更改更新聲明,以包括在它下面的插入的行爲,是否可行?如何正確地將這2個查詢合併爲一個更新?
UPDATE cas
SET [Locked] = CASE WHEN cas.Locked <> @TargetState AND cas.LastChanged = filter.SourceDateTime THEN @TargetState ELSE cas.[Locked] end,
OUTPUT inserted.Id, inserted.Locked, CASE WHEN inserted.Locked = @TargetState AND
inserted.LastChanged = filter.SourceDateTime THEN 1
WHEN inserted.LastChanged <> filter.SourceDateTime THEN -1 -- out of sync
WHEN deleted.Locked = @TargetState THEN -2 -- was not in a good state
ELSE 0 END --generic failure
INTO @OUTPUT
FROM dbo.Target cas WITH(READPAST, UPDLOCK, ROWLOCK) INNER JOIN @table filter ON cas.Id = filter.Id
INSERT INTO @OUTPUT
SELECT filter.id, NULL, when cas.id is not null -3 -- row was/is locked
else -4 end --not found
FROM @table filter left join dbo.target cas with(nolock) on filter.id = cas.id
WHERE NOT EXISTS (SELECT 1 FROM @OUTPUT result WHERE filter.id = result.UpdatedId)
是的,這是可能的。它被稱爲['MERGE'](https://msdn.microsoft.com/en-us/library/bb510625.aspx)。 – lad2025
我不明白@Fredou如何通過MERGE語句獲得他想要的內容。 –
@ lad2025我目前正在尋找合併,我還不確定如何做到這一點與表提示和皮卡行被鎖定,沒有找到,目前我只做一個通用檢查 – Fredou