sqlserver数据库数据追踪例子
获取数据库当前版本号: SELECT CHANGE_TRACKING_CURRENT_VERSION() as currentVersion 1.开启数据库追踪和需要追踪的表的追踪 2.开启需要追踪的表追踪 3..创建TableVersionRecord 表 用于保存追踪结果 CREATE TABLE [dbo].[TableVersionRecord]( 4. 编写追踪存储过程: CREATE?PROCEDURE [dbo].[GetTableChanged]? 到这里 需要做的事情就完了 后面做个测试: 开始B表没有数据 TableVersionRecord也没有记录 ?? 给B表新加一个数据 给B表新加一条数据: 执行追踪存储过程: 可以看到TableVersionRecord 表中就追踪到了B表中的新增操作: TableName 表示追踪到的是哪张表 OperationType 是 操作类型 ? ?I 表示新增 ?(后面修改一下看看是不是U) ChangID ?是B表的主键 ?表示哪条数据变动了 UpdateTime 表示变动的时间 VersionNum 表示表的操作版本(每次对表中的一条数据进行操作都会增加1 ?, ?因为我之前做过测试 所以现在已经是11了) TableVersionRecord 中的一条数据 表示: 在【UpdateTime】时 ?【TableName】表的【ChangID ?】这条数据 ?进行了【OperationType】操作,当前【TableName】表的版本号是【VersionNum】 好了 完了, 谢谢 点赞 测下修改: ?将字段的值从 上面的 ?b 修改成bb ?后 执行追踪存储过程后 的结果: 参考地址:http://www.cnblogs.com/wubihui/p/3530804.html? USE [master] GO /****** Object: ?Database [Test] ? ?Script Date: 2017/5/3 10:42:59 ******/ CREATE DATABASE [Test] ?CONTAINMENT = NONE ?ON ?PRIMARY? ( NAME = N'Test',FILENAME = N'D:Program FilesMicrosoft SQL ServerMSSQL12.MSSQLSERVERMSSQLDATATest.mdf',SIZE = 5120KB,MAXSIZE = UNLIMITED,FILEGROWTH = 1024KB ) ?LOG ON? ( NAME = N'Test_log',FILENAME = N'D:Program FilesMicrosoft SQL ServerMSSQL12.MSSQLSERVERMSSQLDATATest_log.ldf',SIZE = 1024KB,MAXSIZE = 2048GB,FILEGROWTH = 10%) GO ALTER DATABASE [Test] SET COMPATIBILITY_LEVEL = 120 GO IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled')) begin EXEC [Test].[dbo].[sp_fulltext_database] @action = 'enable' end GO ALTER DATABASE [Test] SET ANSI_NULL_DEFAULT OFF? GO ALTER DATABASE [Test] SET ANSI_NULLS OFF? GO ALTER DATABASE [Test] SET ANSI_PADDING OFF? GO ALTER DATABASE [Test] SET ANSI_WARNINGS OFF? GO ALTER DATABASE [Test] SET ARITHABORT OFF? GO ALTER DATABASE [Test] SET AUTO_CLOSE OFF? GO ALTER DATABASE [Test] SET AUTO_SHRINK OFF? GO ALTER DATABASE [Test] SET AUTO_UPDATE_STATISTICS ON? GO ALTER DATABASE [Test] SET CURSOR_CLOSE_ON_COMMIT OFF? GO ALTER DATABASE [Test] SET CURSOR_DEFAULT ?GLOBAL? GO ALTER DATABASE [Test] SET CONCAT_NULL_YIELDS_NULL OFF? GO ALTER DATABASE [Test] SET NUMERIC_ROUNDABORT OFF? GO ALTER DATABASE [Test] SET QUOTED_IDENTIFIER OFF? GO ALTER DATABASE [Test] SET RECURSIVE_TRIGGERS OFF? GO ALTER DATABASE [Test] SET ?DISABLE_BROKER? GO ALTER DATABASE [Test] SET AUTO_UPDATE_STATISTICS_ASYNC OFF? GO ALTER DATABASE [Test] SET DATE_CORRELATION_OPTIMIZATION OFF? GO ALTER DATABASE [Test] SET TRUSTWORTHY OFF? GO ALTER DATABASE [Test] SET ALLOW_SNAPSHOT_ISOLATION OFF? GO ALTER DATABASE [Test] SET PARAMETERIZATION SIMPLE? GO ALTER DATABASE [Test] SET READ_COMMITTED_SNAPSHOT OFF? GO ALTER DATABASE [Test] SET HONOR_BROKER_PRIORITY OFF? GO ALTER DATABASE [Test] SET RECOVERY FULL? GO ALTER DATABASE [Test] SET ?MULTI_USER? GO ALTER DATABASE [Test] SET PAGE_VERIFY CHECKSUM ? GO ALTER DATABASE [Test] SET DB_CHAINING OFF? GO ALTER DATABASE [Test] SET FILESTREAM( NON_TRANSACTED_ACCESS = OFF )? GO ALTER DATABASE [Test] SET TARGET_RECOVERY_TIME = 0 SECONDS? GO ALTER DATABASE [Test] SET DELAYED_DURABILITY = DISABLED? GO EXEC sys.sp_db_vardecimal_storage_format N'Test',N'ON' GO USE [Test] GO /****** Object: ?Table [dbo].[A] ? ?Script Date: 2017/5/3 10:42:59 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[A]( [Aa] [varchar](50) NULL,[Ab] [varchar](50) NULL,[Ac] [varchar](50) NULL,[Ad] [varchar](50) NULL ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO /****** Object: ?Table [dbo].[B] ? ?Script Date: 2017/5/3 10:42:59 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[B]( [Ba] [varchar](50) NULL,[Bb] [varchar](50) NULL,[Bc] [varchar](50) NULL,[Bd] [varchar](50) NULL,[id] [bigint] IDENTITY(1,?CONSTRAINT [PK_B] PRIMARY KEY CLUSTERED? ( [id] ASC )WITH (PAD_INDEX = OFF,ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO /****** Object: ?Table [dbo].[From_Table] ? ?Script Date: 2017/5/3 10:42:59 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[From_Table]( [ID] [bigint] IDENTITY(1,[UserName] [varchar](50) NULL,[Password] [varchar](50) NULL,[Sex] [varchar](50) NULL,[Age] [varchar](50) NULL,[Address] [varchar](50) NULL,[Email] [varchar](50) NULL,?CONSTRAINT [PK_From_Table] PRIMARY KEY CLUSTERED? ( [ID] ASC )WITH (PAD_INDEX = OFF,ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO /****** Object: ?Table [dbo].[TableVersionRecord] ? ?Script Date: 2017/5/3 10:42:59 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[TableVersionRecord]( [ID] [int] IDENTITY(1,[TableName] [nvarchar](1000) NULL,[OperationType] [nvarchar](1000) NULL,[ChangID] [nchar](10) NULL,[UpdateTime] [datetime] NULL CONSTRAINT [DF_TableVersionRecord_UpdateTime] ?DEFAULT (getdate()),[VersionNum] [nvarchar](1000) NULL,?CONSTRAINT [PK_TableVersionRecord] PRIMARY KEY CLUSTERED? ( [ID] ASC )WITH (PAD_INDEX = OFF,ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO /****** Object: ?Table [dbo].[TempB] ? ?Script Date: 2017/5/3 10:42:59 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[TempB]( [Aa] [varchar](50) NULL,[Ad] [varchar](50) NULL,[Ba] [varchar](50) NULL,[Bd] [varchar](50) NULL ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO /****** Object: ?Table [dbo].[To_Table] ? ?Script Date: 2017/5/3 10:42:59 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[To_Table]( [ID] [bigint] IDENTITY(1,?CONSTRAINT [PK_To_Table] PRIMARY KEY CLUSTERED? ( [ID] ASC )WITH (PAD_INDEX = OFF,ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO /****** Object: ?StoredProcedure [dbo].[GetTableChanged] ? ?Script Date: 2017/5/3 10:42:59 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[GetTableChanged]? ? ? AS BEGIN create table #tempTable ( SYS_CHANGE_VERSION varchar(50),SYS_CHANGE_OPERATION varchar(10),ID varchar(50),) DECLARE ?@tableName NVARCHAR(100),@currentVersion nvarchar(100) DECLARE tableName_Cursor CURSOR FAST_FORWARD FOR ?Select Name FROM SysObjects Where XType='U' and Name !='TableVersionRecord' orDER BY Name --SELECT @currentVersion = CHANGE_TRACKING_CURRENT_VERSION() as currentVersion set @currentVersion =CHANGE_TRACKING_CURRENT_VERSION()? OPEN tableName_Cursor FETCH NEXT FROM tableName_Cursor INTO @tableName; WHILE @@FETCH_STATUS = 0 ? ? ?BEGIN ? ? ? ? ? ?FETCH NEXT FROM tableName_Cursor INTO @tableName set @sql ?= 'select '''+@tableName+''' as TableName,ID as ChangID,'''+ @currentVersion +''' as VersionNum ?from ?changetable(changes '+@tableName+',0) ct' ?print @sql insert into TableVersionRecord ?EXEC (@sql) ? ? ?END? CLOSE tableName_Cursor DEALLOCATE tableName_Cursor ? select * from #tempTable ?? ?? ? ? SET NOCOUNT ON; ?? ? ?--exec (@sql); ? END --[dbo].[To_Table] -- select * from ?changetable(changes To_Table,0) ct --SYS_CHANGE_VERSION,SYS_CHANGE_OPERATION,ID? GO USE [master] GO ALTER DATABASE [Test] SET ?READ_WRITE? GO(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |