我已經構建了一個觸發器,我試圖按順序保持優先級,並且不允許重複的優先級值。有一些事情要考慮。多個SQL UPDATE語句或單個CASE在裏面?
- 用戶可以自由形式的優先級。
- 沒有什麼從採摘相同的優先級的另一項阻止他們。
當輸入一個值等於另一個值的新優先項目應優先考慮的優先級和其他應增加。
CREATE TRIGGER dbo.trg_Priority ON dbo.Stories AFTER INSERT,UPDATE,DELETE AS BEGIN SET NOCOUNT ON; -- Insert statements for trigger here DECLARE @StoryId INT DECLARE @OldLocation INT DECLARE @NewLocation INT SELECT @NewLocation = Priority, @StoryId = StoryId FROM INSERTED SELECT @OldLocation = Priority FROM DELETED IF @NewLocation = @OldLocation RETURN; IF @NewLocation IS NULL BEGIN UPDATE Stories SET Priority = Priority - 1 WHERE Priority > @OldLocation END IF @NewLocation > @OldLocation BEGIN UPDATE Stories SET Priority = Priority + 1 WHERE Priority >= @NewLocation AND StoryId <> @StoryId END IF @NewLocation < @OldLocation BEGIN UPDATE Stories SET Priority = Priority + 1 WHERE Priority >= @NewLocation AND Priority < @OldLocation AND StoryId <> @StoryId END END GO
所以如果有關注的領域隨意說話,我沒有測試過這觸發了一大堆。我最終想知道的是,如果我應該嘗試使用case語句將其轉換爲單個更新。 (如果甚至可能的話)
如果將它作爲單個UPDATE
聲明會更高效,我真的可以用一隻手來搞清楚它!