SQL Server觸發器以及如何在SQL Server Manager中調試觸發器


·只有inserted表有數據時,當前操作為insert;
·inserted和deleted兩張表都有數據時,當前操作為update;
·只有deleted表有數據時,當前操作為delete。

1.

CREATE TRIGGER trTask_Update ON dbo.Task
    FOR UPDATE
AS
    BEGIN

        DECLARE @TaskId INT
        DECLARE @NewTaskOrder INT
        DECLARE @WorkstreamId INT
        DECLARE @OldTaskOrder INT

--update
        BEGIN
            SELECT  @TaskId = id ,
                    @OldTaskOrder = TaskOrder ,
                    @WorkstreamId = WorkstreamId
            FROM    deleted

            SELECT  @NewTaskOrder = TaskOrder
            FROM    dbo.Task
            WHERE   Id = @TaskId
--When updating a row, if old value is greater than new value, then +1 all values that are >= the new value and < the old value
            IF @OldTaskOrder > @NewTaskOrder 
                BEGIN
                    UPDATE  dbo.Task
                    SET     TaskOrder = TaskOrder + 1
                    WHERE   WorkstreamId = @WorkstreamId
                            AND TaskOrder >= @NewTaskOrder
                            AND TaskOrder < @OldTaskOrder
                            AND Id <> @TaskId
                END
	
            IF @OldTaskOrder < @NewTaskOrder 
                BEGIN                     
                                
                    UPDATE  dbo.Task
                    SET     TaskOrder = TaskOrder - 1
                    WHERE   WorkstreamId = @WorkstreamId
                            AND TaskOrder <= @NewTaskOrder
                            AND TaskOrder > @OldTaskOrder
                            AND Id <> @TaskId
                END

        END


    END

  

2.

CREATE TRIGGER trTask_Insert ON dbo.Task
    FOR INSERT
AS
    BEGIN

        DECLARE @TaskId INT
        DECLARE @NewTaskOrder INT
        DECLARE @WorkstreamId INT
        DECLARE @OldTaskOrder INT
 
--insert
        BEGIN
            SELECT  @TaskId = id ,
                    @NewTaskOrder = TaskOrder ,
                    @WorkstreamId = WorkstreamId
            FROM    INSERTED
--When inserting a new,+1 to all task orders that are equal to or greater than the newly inserted task's task order
            UPDATE  dbo.Task
            SET     TaskOrder = TaskOrder + 1
            WHERE   WorkstreamId = @WorkstreamId
                    AND TaskOrder >= @NewTaskOrder
                    AND Id <> @TaskId
	
        END

    END

  

 

3.如何調試觸發器:

一、打開SQL查詢分析器
二、將以下Sql語句復制到查詢窗口並運行
use pubs

CREATE  trigger trigger_update on authors
for update
as
begin
 print('update lastname=hoho')
end

CREATE    proc Authors_procInsert
as 
begin
 update  authors set au_lname='HOHO' where au_id='172-32-1176'
end

三、在左邊的對象瀏覽器中選擇pubs->存儲過程在Authors_procInsert(如未出現請刷新pubs數據庫)上右擊‘Execute stored procedure’,設置參數點擊確定打開生成的執行存儲過程的腳本 -> 點擊SQL Server Management 菜單上的Debug -> Start Debugging...
四、當運行到" update  authors set au_lname='HOHO' where au_id='172-32-1176'“時按“F11”即進入觸發器代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM