1.为数据库VIAOSDB 启用缓存依赖,自动生成以下数据表和存储过程
--表
AspNet_SqlCacheTablesForChangeNotification
 
 
--存储过程
AspNet_SqlCachePollingStoredProcedure
AspNet_SqlCacheQueryRegisteredTablesStoredProcedure
AspNet_SqlCacheRegisterTableStoredProcedure
AspNet_SqlCacheUnRegisterTableStoredProcedure
AspNet_SqlCacheUpdateChangeIdStoredProcedure

以下为启用语句
    .\aspnet_regsql.exe -S 10.14.7.215 -U sa -P Admin1234 -d VIAOSDB -ed ----SQLSERVER 验证
 或 .\aspnet_regsql.exe -S server -E -d VIAOSDB -ed                      ----WINDOWS验证
2.为缓存依赖启用某表,自动为表生成触发器
--触发器
AgentInfo_AspNet_SqlCacheNotification_Trigger

以下为启用语句
    .\aspnet_regsql.exe -S 10.14.7.215 -E -d VIAOSDB -t AgentInfo -et    ----为缓存依赖启用该表 (AgentInfo)
 .\aspnet_regsql.exe -S . -E -d VIAOSDB -t InspectionItem -et
	 .\aspnet_regsql.exe -S . -E -d VIAOSDB -t InspectionService -et
	 .\aspnet_regsql.exe -S . -E -d VIAOSDB -t Permission -et
	 .\aspnet_regsql.exe -S . -E -d VIAOSDB -t RoleToPermission -et
	 .\aspnet_regsql.exe -S . -E -d VIAOSDB -t UserInfo -et	
	 .\aspnet_regsql.exe -S . -E -d VIAOSDB -t UserRole -et
	 .\aspnet_regsql.exe -S . -E -d VIAOSDB -t VIStationInfo -et

3.基本原理:缓存依赖为需要的表设置了一个变化情况表AspNet_SqlCacheTablesForChangeNotification以及触发器,当启用缓存依赖的表发生变化时,
各表的触发器会将变化情况记录到表AspNet_SqlCacheTablesForChangeNotification,服务器端程序会根据词表变化情况,更新缓存。
-----------------------------------------------------------附表脚本、存储过程脚本、触发器脚本---------------------------------------
表脚本
USE [VIAOSDB] GO /****** Object: Table [dbo].[AspNet_SqlCacheTablesForChangeNotification] Script Date: 2020/7/3 9:38:09 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[AspNet_SqlCacheTablesForChangeNotification]( [tableName] [NVARCHAR](450) NOT NULL, [notificationCreated] [DATETIME] NOT NULL DEFAULT (GETDATE()), [changeId] [INT] NOT NULL DEFAULT ((0)), PRIMARY KEY CLUSTERED ( [tableName] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO
存储过程脚本
USE [VIAOSDB]
GO
/****** Object:  StoredProcedure [dbo].[AspNet_SqlCachePollingStoredProcedure]    Script Date: 2020/7/3 9:38:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[AspNet_SqlCachePollingStoredProcedure] AS
         SELECT tableName, changeId FROM dbo.AspNet_SqlCacheTablesForChangeNotification
         RETURN 0
GO
/****** Object:  StoredProcedure [dbo].[AspNet_SqlCacheQueryRegisteredTablesStoredProcedure]    Script Date: 2020/7/3 9:38:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[AspNet_SqlCacheQueryRegisteredTablesStoredProcedure] 
         AS
         SELECT tableName FROM dbo.AspNet_SqlCacheTablesForChangeNotification   
GO
/****** Object:  StoredProcedure [dbo].[AspNet_SqlCacheRegisterTableStoredProcedure]    Script Date: 2020/7/3 9:38:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[AspNet_SqlCacheRegisterTableStoredProcedure] 
             @tableName NVARCHAR(450) 
         AS
         BEGIN
         DECLARE @triggerName AS NVARCHAR(3000) 
         DECLARE @fullTriggerName AS NVARCHAR(3000)
         DECLARE @canonTableName NVARCHAR(3000) 
         DECLARE @quotedTableName NVARCHAR(3000) 
         /* Create the trigger name */ 
         SET @triggerName = REPLACE(@tableName, ‘[‘, ‘__o__‘) 
         SET @triggerName = REPLACE(@triggerName, ‘]‘, ‘__c__‘) 
         SET @triggerName = @triggerName + ‘_AspNet_SqlCacheNotification_Trigger‘ 
         SET @fullTriggerName = ‘dbo.[‘ + @triggerName + ‘]‘ 
         /* Create the cannonicalized table name for trigger creation */ 
         /* Do not touch it if the name contains other delimiters */ 
         IF (CHARINDEX(‘.‘, @tableName) <> 0 OR 
             CHARINDEX(‘[‘, @tableName) <> 0 OR 
             CHARINDEX(‘]‘, @tableName) <> 0) 
             SET @canonTableName = @tableName 
         ELSE 
             SET @canonTableName = ‘[‘ + @tableName + ‘]‘ 
         /* First make sure the table exists */ 
         IF (SELECT OBJECT_ID(@tableName, ‘U‘)) IS NULL 
         BEGIN 
             RAISERROR (‘00000001‘, 16, 1) 
             RETURN 
         END 
         BEGIN TRAN
         /* Insert the value into the notification table */ 
         IF NOT EXISTS (SELECT tableName FROM dbo.AspNet_SqlCacheTablesForChangeNotification WITH (NOLOCK) WHERE tableName = @tableName) 
             IF NOT EXISTS (SELECT tableName FROM dbo.AspNet_SqlCacheTablesForChangeNotification WITH (TABLOCKX) WHERE tableName = @tableName) 
                 INSERT  dbo.AspNet_SqlCacheTablesForChangeNotification 
                 VALUES (@tableName, GETDATE(), 0)
         /* Create the trigger */ 
         SET @quotedTableName = QUOTENAME(@tableName, ‘‘‘‘) 
         IF NOT EXISTS (SELECT name FROM sysobjects WITH (NOLOCK) WHERE name = @triggerName AND type = ‘TR‘) 
             IF NOT EXISTS (SELECT name FROM sysobjects WITH (TABLOCKX) WHERE name = @triggerName AND type = ‘TR‘) 
                 EXEC(‘CREATE TRIGGER ‘ + @fullTriggerName + ‘ ON ‘ + @canonTableName +‘
                       FOR INSERT, UPDATE, DELETE AS BEGIN
                       SET NOCOUNT ON
                       EXEC dbo.AspNet_SqlCacheUpdateChangeIdStoredProcedure N‘ + @quotedTableName + ‘
                       END
                       ‘)
         COMMIT TRAN
         END
   
GO
/****** Object:  StoredProcedure [dbo].[AspNet_SqlCacheUnRegisterTableStoredProcedure]    Script Date: 2020/7/3 9:38:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[AspNet_SqlCacheUnRegisterTableStoredProcedure] 
             @tableName NVARCHAR(450) 
         AS
         BEGIN
         BEGIN TRAN
         DECLARE @triggerName AS NVARCHAR(3000) 
         DECLARE @fullTriggerName AS NVARCHAR(3000)
         SET @triggerName = REPLACE(@tableName, ‘[‘, ‘__o__‘) 
         SET @triggerName = REPLACE(@triggerName, ‘]‘, ‘__c__‘) 
         SET @triggerName = @triggerName + ‘_AspNet_SqlCacheNotification_Trigger‘ 
         SET @fullTriggerName = ‘dbo.[‘ + @triggerName + ‘]‘ 
         /* Remove the table-row from the notification table */ 
         IF EXISTS (SELECT name FROM sysobjects WITH (NOLOCK) WHERE name = ‘AspNet_SqlCacheTablesForChangeNotification‘ AND type = ‘U‘) 
             IF EXISTS (SELECT name FROM sysobjects WITH (TABLOCKX) WHERE name = ‘AspNet_SqlCacheTablesForChangeNotification‘ AND type = ‘U‘) 
             DELETE FROM dbo.AspNet_SqlCacheTablesForChangeNotification WHERE tableName = @tableName 
         /* Remove the trigger */ 
         IF EXISTS (SELECT name FROM sysobjects WITH (NOLOCK) WHERE name = @triggerName AND type = ‘TR‘) 
             IF EXISTS (SELECT name FROM sysobjects WITH (TABLOCKX) WHERE name = @triggerName AND type = ‘TR‘) 
             EXEC(‘DROP TRIGGER ‘ + @fullTriggerName) 
         COMMIT TRAN
         END
   
GO
/****** Object:  StoredProcedure [dbo].[AspNet_SqlCacheUpdateChangeIdStoredProcedure]    Script Date: 2020/7/3 9:38:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[AspNet_SqlCacheUpdateChangeIdStoredProcedure] 
             @tableName NVARCHAR(450) 
         AS
         BEGIN 
             UPDATE dbo.AspNet_SqlCacheTablesForChangeNotification WITH (ROWLOCK) SET changeId = changeId + 1 
             WHERE tableName = @tableName
         END
   
GO
触发器脚本
USE [VIAOSDB]
GO
/****** Object:  Trigger [dbo].[AgentInfo_AspNet_SqlCacheNotification_Trigger]    Script Date: 2020/7/3 9:37:26 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[AgentInfo_AspNet_SqlCacheNotification_Trigger] ON [dbo].[AgentInfo]
                       FOR INSERT, UPDATE, DELETE AS BEGIN
                       SET NOCOUNT ON
                       EXEC dbo.AspNet_SqlCacheUpdateChangeIdStoredProcedure N‘AgentInfo‘
                       END
                       
此文参考:https://www.jb51.net/article/84431.htm

原文:https://www.cnblogs.com/password1/p/13228560.html