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
