标签:没有 val 增删改 sql 一个 type stat count 展示
Sql Server 触发器:指的是 在进行 Insert 、Update、Delete时 所执行的操作
我们可以在进行增删改操作的同时对其他数据进行操作。其实触发器算是一种存储过程,只不过执行的机制 只是在进行增删改操作时执行;
需求: 由于业务的需要,需要做一个统计报表,根据角色不同展示相应的四个系统的设备数据;
如果按照查询各个库中设备的数据汇总到一块,这样查询效率很低;
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
标签:没有 val 增删改 sql 一个 type stat count 展示
原文地址:https://www.cnblogs.com/HubertBiyo/p/9649589.html