sql server记录数据库表行数变化记录

sql server记录数据库表行数变化记录
1.创建记录表

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[T_RPT_TABLE_SPACEINFO](
	[PKID] [bigint] IDENTITY(1,1) NOT NULL,
	[TB_NAME] [varchar](512) NULL,
	[CREATE_DATE] [datetime] NULL,
	[ROWS] [bigint] NULL,
	[INCREASE] [bigint] NULL,
	[VERSION] [bigint] NULL,
	[SCHEMA_NAMES] [varchar](512) NULL,
	[WEEK_NUM] [int] NULL,
 CONSTRAINT [PK_T_RPT_TABLE] PRIMARY KEY CLUSTERED 
(
	[PKID] 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

2.收集表行数变化的存储过程

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


CREATE PROCEDURE [dbo].[report_database_table_spaceinfo]
AS
BEGIN
    BEGIN TRY
		DECLARE @version INTEGER;
		DECLARE @new_version INTEGER;  
		PRINT 'step1: 查询本次操作的版本号';

		SELECT @version = VERSION FROM [DBO].[T_RPT_VERSION] WHERE PKID = 1
		PRINT @version;
		SET @new_version = @version + 1;


        PRINT 'step2: 查询出所有表和条数';
	
		/*使用游标,循环得到表空间使用情况*/ 
		DECLARE Info_cursor CURSOR
		FOR
           SELECT A.NAME AS table_names ,B.ROWS AS table_rows, C.name AS schema_names FROM sysobjects  A JOIN sysindexes B ON A.id = B.id LEFT JOIN sys.schemas c ON A.uid = C.schema_id WHERE A.xtype = 'U' AND B.indid IN(0,1)  ORDER BY B.ROWS DESC
		OPEN Info_cursor  
		DECLARE @table_names VARCHAR(512), @table_rows VARCHAR(512), @schema_names VARCHAR(512);  ;    
		FETCH NEXT FROM Info_cursor INTO @table_names,  @table_rows, @schema_names
		

		WHILE @@FETCH_STATUS = 0
		BEGIN 
			DECLARE @rows INTEGER;
			SET @rows = 0;
			SELECT @rows = ROWS FROM [DBO].[T_RPT_TABLE_SPACEINFO] WHERE TB_NAME = @table_names AND VERSION = @version AND SCHEMA_NAMES = @schema_names;
			
			/*插入数据*/
			INSERT INTO [dbo].[T_RPT_TABLE_SPACEINFO]
			(
				[SCHEMA_NAMES]
			   ,[TB_NAME]
			   ,[CREATE_DATE]
			   ,[ROWS]
			   ,[INCREASE]
			   ,[VERSION]
			   ,[WEEK_NUM]

			)
			VALUES
           (
		        @schema_names
			   ,@table_names
			   ,GETDATE()
			   ,@table_rows
			   ,@table_rows - @rows
			   ,@new_version
			   ,DATENAME(WEEK, GETDATE())
		   )
			FETCH NEXT FROM Info_cursor INTO @table_names,  @table_rows, @schema_names

		END
		CLOSE Info_cursor  
		DEALLOCATE Info_cursor  
		PRINT 'step3: 更新版本号';
		UPDATE [DBO].[T_RPT_VERSION] SET VERSION = @new_version WHERE PKID = 1;

    END TRY
    BEGIN CATCH
        IF @@TRANCOUNT > 0
        BEGIN
            ROLLBACK TRAN;
            PRINT '数据回滚';
        END;
        PRINT '失败';
    END CATCH;
    PRINT '操作完成';
END;

GO



3.后面就可以根据自己的需求创建定时job,设定是每天跑存储过程还是每周跑

相关推荐

  1. sql server记录数据库变化记录

    2024-07-12 19:16:03       23 阅读
  2. docker部署sqlserver过程记录

    2024-07-12 19:16:03       24 阅读
  3. 查询pg 数据库,和 大小

    2024-07-12 19:16:03       33 阅读
  4. sql server 查询所有记录

    2024-07-12 19:16:03       50 阅读
  5. 统计HBase记录的方法

    2024-07-12 19:16:03       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 19:16:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 19:16:03       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 19:16:03       58 阅读
  4. Python语言-面向对象

    2024-07-12 19:16:03       69 阅读

热门阅读

  1. 小抄 20240711

    2024-07-12 19:16:03       20 阅读
  2. vscode 远程开发

    2024-07-12 19:16:03       18 阅读
  3. clean code-代码整洁之道 阅读笔记(第十六章)

    2024-07-12 19:16:03       17 阅读
  4. MySQL慢查询日志(Slow Query Log)

    2024-07-12 19:16:03       17 阅读
  5. ZCC5429 异步升压芯片

    2024-07-12 19:16:03       21 阅读
  6. 介绍一下docker的打包命令

    2024-07-12 19:16:03       22 阅读
  7. 华为OJ平台

    2024-07-12 19:16:03       19 阅读
  8. inline与nullptr

    2024-07-12 19:16:03       22 阅读
  9. ActiViz中的跟随者vtkFollower

    2024-07-12 19:16:03       22 阅读
  10. 常见的load_file()读取的敏感信息

    2024-07-12 19:16:03       21 阅读
  11. tomcat的介绍与优化

    2024-07-12 19:16:03       21 阅读
  12. Elasticsearch实战指南:从下载到高级应用全解析

    2024-07-12 19:16:03       21 阅读
  13. python .join用法

    2024-07-12 19:16:03       18 阅读
  14. 力扣995.K连续位的最小翻转次数

    2024-07-12 19:16:03       22 阅读