Sql Server 觸發器的應用


 

Sql Server 觸發器:指的是 在進行  Insert 、Update、Delete時 所執行的操作

我們可以在進行增刪改操作的同時對其他數據進行操作。其實觸發器算是一種存儲過程,只不過執行的機制 只是在進行增刪改操作時執行;

  應用場景:

   需求: 由於業務的需要,需要做一個統計報表,根據角色不同展示相應的四個系統的設備數據;

       如果按照查詢各個庫中設備的數據匯總到一塊,這樣查詢效率很低;

  解決方案:

  • 創建一個設備統計表;
  • 使用SQL Server觸發器,每增加、刪除 設備數據時,同時觸發一條 新增或者更新該設備數量的操作,往我們創建的設備統計表插入或更新數據即可;這樣,我們直接根據統計表的數據去展現就好了。

  具體操作(這只是一個Demo,大家可以根據業務拓展)

  

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER Trigger_Device_Count ON dbo.Device
    FOR INSERT, DELETE
AS
    BEGIN
        DECLARE @UserCode NVARCHAR(50)
        DECLARE @Count INT
        DECLARE @IsHave INT

        --判斷該觸發操作是Insert 還是Delete ,獲取UserCode
        SELECT  @UserCode = UserCode
        FROM    Inserted
        IF @UserCode IS NOT NULL
            BEGIN
                SET @UserCode = @UserCode
            END
        ELSE
            BEGIN
                SELECT  @UserCode = UserCode
                FROM    Deleted
            END
        
        --根據得到的UserCode  獲取最新的設備總數
        SELECT  @Count = COUNT(0)
        FROM    dbo.Device
        WHERE   UserCode = @UserCode

        --查詢統計表是否存在該設備數據,沒有則新增,有則更新
        SELECT  @IsHave = COUNT(0)
        FROM    dbo.[Statistics] 
    
        IF @IsHave <= 0
            BEGIN
                INSERT  INTO dbo.[Statistics]
                        ( Id, DeviceCount, UserCode )
                VALUES  ( NEWID(), -- Id - uniqueidentifier
                          @Count, -- DeviceCount - int
                          @UserCode  -- UserCode - nvarchar(50)
                          )
            END
        ELSE
            BEGIN
                UPDATE  dbo.[Statistics]
                SET     DeviceCount = @Count
                WHERE   UserCode = @UserCode
            END
    END
GO

 設備表Device、統計表 Statistics

CREATE TABLE [dbo].[Device](
    [Id] [UNIQUEIDENTIFIER] NOT NULL,
    [DeviceCode] [NVARCHAR](50) NULL,
    [DeviceType] [NVARCHAR](50) NULL,
    [UserCode] [NVARCHAR](50) NULL
) ON [PRIMARY]

GO

CREATE TABLE [dbo].[Statistics](
    [Id] [UNIQUEIDENTIFIER] NOT NULL,
    [DeviceCount] [INT] NULL,
    [UserCode] [NVARCHAR](50) NULL
) ON [PRIMARY]

GO

 


免責聲明!

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



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