日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UNdelete

發布時間:2024/6/14 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UNdelete 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?--90兼容模式以上,2005+

?-- http://raresql.com/2012/10/24/sql-server-how-to-find-who-deleted-what-records-at-what-time/
-- Script Name: Recover_Deleted_Data_With_UID_Date_Time_Proc
-- Script Type : Recovery Procedure
-- Develop By: Muhammad Imran
-- Date Created: 24 Oct 2012
-- Modify Date:
-- Version??? : 1.2
-- Notes????? :
-- 1.修改不傳入DB Name改取自DB_NAME()
-- 2.修改 sysname DataType to nvarchar(128)
-- 3.使用SUSER_SNAME 代替 sysusers join 找出操作人員
-- 4.修正在區分大小寫的DB中,會發生的錯誤
-- 5.加入判斷,如下是透過SSMS的Edit Row時,刪除的[Transaction Name] 會用 user_transaction [Transaction Name] IN ('DELETE', 'user_transaction')
-- Example: EXEC Recover_Deleted_Data_With_UID_Date_Time_Proc? 'dbo.tbl_Sample'
CREATE? PROCEDURE Recover_Deleted_Data_With_UID_Date_Time_Proc
??? @SchemaName_n_TableName NVARCHAR(MAX) ,
??? @Date_From DATETIME = '1900/01/01' ,
??? @Date_To DATETIME = '9999/12/31'
AS
??? DECLARE @RowLogContents VARBINARY(8000)
??? DECLARE @TransactionID NVARCHAR(MAX)
??? DECLARE @AllocUnitID BIGINT
??? DECLARE @AllocUnitName NVARCHAR(MAX)
??? DECLARE @SQL NVARCHAR(MAX)
??? DECLARE @Compatibility_Level INT
?DECLARE @Database_Name NVARCHAR(MAX?)
?
?SET @Database_Name = DB_NAME()
??? SELECT? @Compatibility_Level = dtb.compatibility_level
??? FROM??? master.sys.databases AS dtb
??? WHERE?? dtb.name = @Database_Name
?
??? IF ISNULL(@Compatibility_Level, 0) <= 80
??????? BEGIN
??????????? RAISERROR('The compatibility level should be equal to or greater SQL SERVER 2005 (90)',16,1)
??????????? RETURN
??????? END
?
??? IF ( SELECT COUNT(*)
???????? FROM?? INFORMATION_SCHEMA.TABLES
???????? WHERE? [TABLE_SCHEMA] + '.' + [TABLE_NAME] = @SchemaName_n_TableName
?????? ) = 0
??????? BEGIN
??????????? RAISERROR('Could not found the table in the defined database',16,1)
??????????? RETURN
??????? END
?
??? DECLARE @bitTable TABLE
??????? (
????????? [ID] INT ,
????????? [Bitvalue] INT
??????? )
--Create table to set the bit position of one byte.
?
??? INSERT? INTO @bitTable
??????????? SELECT? 0 ,
??????????????????? 2
??????????? UNION ALL
??????????? SELECT? 1 ,
??????????????????? 2
??????????? UNION ALL
??????????? SELECT? 2 ,
??????????????????? 4
??????????? UNION ALL
??????????? SELECT? 3 ,
??????????????????? 8
??????????? UNION ALL
??????????? SELECT? 4 ,
??????????????????? 16
??????????? UNION ALL
??????????? SELECT? 5 ,
??????????????????? 32
??????????? UNION ALL
??????????? SELECT? 6 ,
??????????????????? 64
??????????? UNION ALL
??????????? SELECT? 7 ,
??????????????????? 128
?
--Create table to collect the row data.
??? DECLARE @DeletedRecords TABLE
??????? (
????????? [Row ID] INT IDENTITY(1, 1) ,
????????? [RowLogContents] VARBINARY(8000) ,
????????? [AllocUnitId] BIGINT ,
????????? [Transaction ID] NVARCHAR(MAX) ,
????????? [FixedLengthData] SMALLINT ,
????????? [TotalNoOfCols] SMALLINT ,
????????? [NullBitMapLength] SMALLINT ,
????????? [NullBytes] VARBINARY(8000) ,
????????? [TotalNoofVarCols] SMALLINT ,
????????? [ColumnOffsetArray] VARBINARY(8000) ,
????????? [VarColumnStart] SMALLINT ,
????????? [Slot ID] INT ,
????????? [NullBitMap] VARCHAR(MAX)
??????? )
--Create a common table expression to get all the row data plus how many bytes we have for each row.
;
??? WITH??? RowData
????????????? AS ( SELECT?? [RowLog Contents 0] AS [RowLogContents] ,
??????????????????????????? [AllocUnitID] AS [AllocUnitID] ,
??????????????????????????? [Transaction ID] AS [Transaction ID]?
?
--[Fixed Length Data] = Substring (RowLog content 0, Status Bit A+ Status Bit B + 1,2 bytes)
??????????????????????????? ,
??????????????????????????? CONVERT(SMALLINT, CONVERT(BINARY(2), REVERSE(SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????????????????? 2 + 1, 2)))) AS [FixedLengthData]? --@FixedLengthData
?
-- [TotalnoOfCols] =? Substring (RowLog content 0, [Fixed Length Data] + 1,2 bytes)
??????????????????????????? ,
??????????????????????????? CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????????????????? CONVERT(SMALLINT, CONVERT(BINARY(2), REVERSE(SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????????????????? 2 + 1, 2)))) + 1,
????????????????????????????????????????????????????????????? 2)))) AS [TotalNoOfCols]
?
--[NullBitMapLength]=ceiling([Total No of Columns] /8.0)
??????????????????????????? ,
??????????????????????????? CONVERT(INT, CEILING(CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????????????????? CONVERT(SMALLINT, CONVERT(BINARY(2), REVERSE(SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????????????????? 2 + 1, 2)))) + 1,
????????????????????????????????????????????????????????????? 2)))) / 8.0)) AS [NullBitMapLength]
?
--[Null Bytes] = Substring (RowLog content 0, Status Bit A+ Status Bit B + [Fixed Length Data] +1, [NullBitMapLength] )
??????????????????????????? ,
??????????????????????????? SUBSTRING([RowLog Contents 0],
????????????????????????????????????? CONVERT(SMALLINT, CONVERT(BINARY(2), REVERSE(SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????????????????? 2 + 1, 2)))) + 3,
????????????????????????????????????? CONVERT(INT, CEILING(CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????????????????? CONVERT(SMALLINT, CONVERT(BINARY(2), REVERSE(SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????????????????? 2 + 1, 2)))) + 1,
????????????????????????????????????????????????????????????? 2)))) / 8.0))) AS [NullBytes]
?
--[TotalNoofVarCols] = Substring (RowLog content 0, Status Bit A+ Status Bit B + [Fixed Length Data] +1, [Null Bitmap length] + 2 )
??????????????????????????? ,
??????????????????????????? ( CASE WHEN SUBSTRING([RowLog Contents 0], 1, 1) IN (
??????????????????????????????????????? 0x10, 0x30, 0x70 )
?????????????????????????????????? THEN CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????????????????? CONVERT(SMALLINT, CONVERT(BINARY(2), REVERSE(SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????????????????? 2 + 1, 2)))) + 3
????????????????????????????????????????????????????????????? + CONVERT(INT, CEILING(CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????????????????? CONVERT(SMALLINT, CONVERT(BINARY(2), REVERSE(SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????????????????? 2 + 1, 2)))) + 1,
????????????????????????????????????????????????????????????? 2)))) / 8.0)), 2))))
?????????????????????????????????? ELSE NULL
????????????????????????????? END ) AS [TotalNoofVarCols]
?
--[ColumnOffsetArray]= Substring (RowLog content 0, Status Bit A+ Status Bit B + [Fixed Length Data] +1, [Null Bitmap length] + 2 , [TotalNoofVarCols]*2 )
??????????????????????????? ,
??????????????????????????? ( CASE WHEN SUBSTRING([RowLog Contents 0], 1, 1) IN (
??????????????????????????????????????? 0x10, 0x30, 0x70 )
?????????????????????????????????? THEN SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????? CONVERT(SMALLINT, CONVERT(BINARY(2), REVERSE(SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????????????????? 2 + 1, 2)))) + 3
????????????????????????????????????????????????? + CONVERT(INT, CEILING(CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????????????????? CONVERT(SMALLINT, CONVERT(BINARY(2), REVERSE(SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????????????????? 2 + 1, 2)))) + 1,
????????????????????????????????????????????????????????????? 2)))) / 8.0))
????????????????????????????????????????????????? + 2,
????????????????????????????????????????????????? ( CASE WHEN SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????????????????? 1, 1) IN ( 0x10,
????????????????????????????????????????????????????????????? 0x30, 0x70 )
???????????????????????????????????????????????????????? THEN CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????????????????? CONVERT(SMALLINT, CONVERT(BINARY(2), REVERSE(SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????????????????? 2 + 1, 2)))) + 3
????????????????????????????????????????????????????????????? + CONVERT(INT, CEILING(CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????????????????? CONVERT(SMALLINT, CONVERT(BINARY(2), REVERSE(SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????????????????? 2 + 1, 2)))) + 1,
????????????????????????????????????????????????????????????? 2)))) / 8.0)), 2))))
???????????????????????????????????????????????????????? ELSE NULL
??????????????????????????????????????????????????? END ) * 2)
?????????????????????????????????? ELSE NULL
????????????????????????????? END ) AS [ColumnOffsetArray]
?
--? Variable column Start = Status Bit A+ Status Bit B + [Fixed Length Data] + [Null Bitmap length] + 2+([TotalNoofVarCols]*2)
??????????????????????????? ,
??????????????????????????? CASE WHEN SUBSTRING([RowLog Contents 0], 1, 1) IN (
????????????????????????????????????? 0x10, 0x30, 0x70 )
???????????????????????????????? THEN ( CONVERT(SMALLINT, CONVERT(BINARY(2), REVERSE(SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????????????????? 2 + 1, 2)))) + 4
??????????????????????????????????????? + CONVERT(INT, CEILING(CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????????????????? CONVERT(SMALLINT, CONVERT(BINARY(2), REVERSE(SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????????????????? 2 + 1, 2)))) + 1,
????????????????????????????????????????????????????????????? 2)))) / 8.0))
??????????????????????????????????????? + ( ( CASE WHEN SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????????????????? 1, 1) IN ( 0x10,
????????????????????????????????????????????????????????????? 0x30, 0x70 )
?????????????????????????????????????????????????? THEN CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????????????????? CONVERT(SMALLINT, CONVERT(BINARY(2), REVERSE(SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????????????????? 2 + 1, 2)))) + 3
????????????????????????????????????????????????????????????? + CONVERT(INT, CEILING(CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????????????????? CONVERT(SMALLINT, CONVERT(BINARY(2), REVERSE(SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????????????????? 2 + 1, 2)))) + 1,
????????????????????????????????????????????????????????????? 2)))) / 8.0)), 2))))
?????????????????????????????????????????????????? ELSE NULL
????????????????????????????????????????????? END ) * 2 ) )
???????????????????????????????? ELSE NULL
??????????????????????????? END AS [VarColumnStart] ,
??????????????????????????? [Slot ID]
?????????????????? FROM???? sys.fn_dblog(NULL, NULL)
?????????????????? WHERE??? AllocUnitId IN (
??????????????????????????? SELECT? [Allocation_unit_id]
??????????????????????????? FROM??? sys.allocation_units allocunits
??????????????????????????????????? INNER JOIN sys.partitions partitions ON ( allocunits.type IN (
????????????????????????????????????????????????????????????? 1, 3 )
????????????????????????????????????????????????????????????? AND partitions.hobt_id = allocunits.container_id
????????????????????????????????????????????????????????????? )
????????????????????????????????????????????????????????????? OR ( allocunits.type = 2
????????????????????????????????????????????????????????????? AND partitions.partition_id = allocunits.container_id
????????????????????????????????????????????????????????????? )
??????????????????????????? WHERE?? object_id = OBJECT_ID(''
????????????????????????????????????????????????????????? + @SchemaName_n_TableName
????????????????????????????????????????????????????????? + '') )
??????????????????????????? AND Context IN ( 'LCX_MARK_AS_GHOST', 'LCX_HEAP' )
??????????????????????????? AND Operation IN ( 'LOP_DELETE_ROWS' )
??????????????????????????? AND SUBSTRING([RowLog Contents 0], 1, 1) IN ( 0x10,
????????????????????????????????????????????????????????????? 0x30, 0x70 )
?
/*Use this subquery to filter the date*/
??????????????????????????? AND [TRANSACTION ID] IN (
??????????????????????????? SELECT DISTINCT
??????????????????????????????????? [TRANSACTION ID]
??????????????????????????? FROM??? sys.fn_dblog(NULL, NULL)
??????????????????????????? WHERE?? Context IN ( 'LCX_NULL' )
??????????????????????????????????? AND Operation IN ( 'LOP_BEGIN_XACT' )
??????????????????????????????????? AND [Transaction Name] IN ('DELETE', 'user_transaction')???????????????????????????
??????????????????????????????????? AND CONVERT(NVARCHAR(11), [Begin Time]) BETWEEN @Date_From
????????????????????????????????????????????????????????????? AND
????????????????????????????????????????????????????????????? @Date_To)
???????????????? ),
?
--Use this technique to repeate the row till the no of bytes of the row.
??????????? N1 ( n )
????????????? AS ( SELECT?? 1
?????????????????? UNION ALL
?????????????????? SELECT?? 1
???????????????? ),
??????????? N2 ( n )
????????????? AS ( SELECT?? 1
?????????????????? FROM???? N1 AS X ,
??????????????????????????? N1 AS Y
???????????????? ),
??????????? N3 ( n )
????????????? AS ( SELECT?? 1
?????????????????? FROM???? N2 AS X ,
??????????????????????????? N2 AS Y
???????????????? ),
??????????? N4 ( n )
????????????? AS ( SELECT?? ROW_NUMBER() OVER ( ORDER BY X.n )
?????????????????? FROM???? N3 AS X ,
??????????????????????????? N3 AS Y
???????????????? )
??????? INSERT? INTO @DeletedRecords
??????????????? SELECT? RowLogContents ,
??????????????????????? [AllocUnitID] ,
??????????????????????? [Transaction ID] ,
??????????????????????? [FixedLengthData] ,
??????????????????????? [TotalNoOfCols] ,
??????????????????????? [NullBitMapLength] ,
??????????????????????? [NullBytes] ,
??????????????????????? [TotalNoofVarCols] ,
??????????????????????? [ColumnOffsetArray] ,
??????????????????????? [VarColumnStart] ,
??????????????????????? [Slot ID]
???????? ---Get the Null value against each column (1 means null zero means not null)
??????????????????????? ,
??????????????????????? [NullBitMap] = ( REPLACE(STUFF(( SELECT
????????????????????????????????????????????????????????????? ','
????????????????????????????????????????????????????????????? + ( CASE
????????????????????????????????????????????????????????????? WHEN [ID] = 0
????????????????????????????????????????????????????????????? THEN CONVERT(NVARCHAR(1), ( SUBSTRING(NullBytes,
????????????????????????????????????????????????????????????? n, 1) % 2 ))
????????????????????????????????????????????????????????????? ELSE CONVERT(NVARCHAR(1), ( ( SUBSTRING(NullBytes,
????????????????????????????????????????????????????????????? n, 1)
????????????????????????????????????????????????????????????? / [Bitvalue] )
????????????????????????????????????????????????????????????? % 2 ))
????????????????????????????????????????????????????????????? END ) --as [NullBitMap]
???????????????????????????????????????????????????????? FROM N4 AS Nums
????????????????????????????????????????????????????????????? JOIN RowData AS C ON n <= NullBitMapLength
????????????????????????????????????????????????????????????? CROSS JOIN @bitTable
???????????????????????????????????????????????????????? WHERE
????????????????????????????????????????????????????????????? C.[RowLogContents] = D.[RowLogContents]
???????????????????????????????????????????????????????? ORDER BY [RowLogContents] ,
????????????????????????????????????????????????????????????? n ASC
?????????????????????????????????????????????????????? FOR
???????????????????????????????????????????????????????? XML PATH('')
?????????????????????????????????????????????????????? ), 1, 1, ''), ',', '') )
??????????????? FROM??? RowData D
?
??? IF ( SELECT COUNT(*)
???????? FROM?? @DeletedRecords
?????? ) = 0
??????? BEGIN
??????????? RAISERROR('There is no data in the log as per the search criteria',16,1)
??????????? RETURN
??????? END
?
??? DECLARE @ColumnNameAndData TABLE
??????? (
????????? [Transaction ID] VARCHAR(100) ,
????????? [Row ID] INT ,
????????? [RowLogContents] VARBINARY(MAX) ,
????????? [NAME] nvarchar(128) ,
????????? [nullbit] SMALLINT ,
????????? [leaf_offset] SMALLINT ,
????????? [length] SMALLINT ,
????????? [system_type_id] TINYINT ,
????????? [bitpos] TINYINT ,
????????? [xprec] TINYINT ,
????????? [xscale] TINYINT ,
????????? [is_null] INT ,
????????? [Column value Size] INT ,
????????? [Column Length] INT ,
????????? [hex_Value] VARBINARY(MAX) ,
????????? [Slot ID] INT ,
????????? [Update] INT
??????? )
?
--Create common table expression and join it with the rowdata table
-- to get each column details
/*This part is for variable data columns*/
--@RowLogContents,
--(col.columnOffValue - col.columnLength) + 1,
--col.columnLength
--)
??? INSERT? INTO @ColumnNameAndData
??????????? SELECT? [Transaction ID] ,
??????????????????? [Row ID] ,
??????????????????? RowLogContents ,
??????????????????? NAME ,
??????????????????? cols.leaf_null_bit AS nullbit ,
??????????????????? leaf_offset ,
??????????????????? ISNULL(syscolumns.length, cols.max_length) AS [length] ,
??????????????????? cols.system_type_id ,
??????????????????? cols.leaf_bit_position AS bitpos ,
??????????????????? ISNULL(syscolumns.xprec, cols.precision) AS xprec ,
??????????????????? ISNULL(syscolumns.xscale, cols.scale) AS xscale ,
??????????????????? SUBSTRING([NullBitMap], cols.leaf_null_bit, 1) AS is_null ,
??????????????????? ( CASE WHEN leaf_offset < 1
??????????????????????????????? AND SUBSTRING([NullBitMap], cols.leaf_null_bit,
????????????????????????????????????????????? 1) = 0
?????????????????????????? THEN ( CASE WHEN CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1, 2)))) > 30000
?????????????????????????????????????? THEN CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1, 2))))
??????????????????????????????????????????? - POWER(2, 15)
?????????????????????????????????????? ELSE CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1, 2))))
????????????????????????????????? END )
????????????????????? END ) AS [Column value Size] ,
??????????????????? ( CASE WHEN leaf_offset < 1
??????????????????????????????? AND SUBSTRING([NullBitMap], cols.leaf_null_bit,
????????????????????????????????????????????? 1) = 0
?????????????????????????? THEN ( CASE WHEN CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1, 2)))) > 30000
??????????????????????????????????????????? AND ISNULL(NULLIF(CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * ( ( leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1 ) )
????????????????????????????????????????????????????????????? - 1, 2)))), 0),
?????????????????????????????????????????????????????? [VarColumnStart]) < 30000
?????????????????????????????????????? THEN ( CASE WHEN [system_type_id] IN (
??????????????????????????????????????????????????????? 35, 34, 99 ) THEN 16
?????????????????????????????????????????????????? ELSE 24
????????????????????????????????????????????? END )
?????????????????????????????????????? WHEN CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1, 2)))) > 30000
??????????????????????????????????????????? AND ISNULL(NULLIF(CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * ( ( leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1 ) )
????????????????????????????????????????????????????????????? - 1, 2)))), 0),
?????????????????????????????????????????????????????? [VarColumnStart]) > 30000
?????????????????????????????????????? THEN ( CASE WHEN [system_type_id] IN (
??????????????????????????????????????????????????????? 35, 34, 99 ) THEN 16
?????????????????????????????????????????????????? ELSE 24
????????????????????????????????????????????? END ) --24
?????????????????????????????????????? WHEN CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1, 2)))) < 30000
??????????????????????????????????????????? AND ISNULL(NULLIF(CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * ( ( leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1 ) )
????????????????????????????????????????????????????????????? - 1, 2)))), 0),
?????????????????????????????????????????????????????? [VarColumnStart]) < 30000
?????????????????????????????????????? THEN ( CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1, 2))))
????????????????????????????????????????????? - ISNULL(NULLIF(CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * ( ( leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1 ) )
????????????????????????????????????????????????????????????? - 1, 2)))), 0),
?????????????????????????????????????????????????????? [VarColumnStart]) )
?????????????????????????????????????? WHEN CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1, 2)))) < 30000
??????????????????????????????????????????? AND ISNULL(NULLIF(CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * ( ( leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1 ) )
????????????????????????????????????????????????????????????? - 1, 2)))), 0),
?????????????????????????????????????????????????????? [VarColumnStart]) > 30000
?????????????????????????????????????? THEN POWER(2, 15)
??????????????????????????????????????????? + CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1, 2))))
??????????????????????????????????????????? - ISNULL(NULLIF(CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * ( ( leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1 ) )
????????????????????????????????????????????????????????????? - 1, 2)))), 0),
???????????????????????????????????????????????????? [VarColumnStart])
????????????????????????????????? END )
????????????????????? END ) AS [Column Length] ,
??????????????????? ( CASE WHEN SUBSTRING([NullBitMap], cols.leaf_null_bit, 1) = 1
?????????????????????????? THEN NULL
?????????????????????????? ELSE SUBSTRING(RowLogContents,
????????????????????????????????????????? ( ( CASE WHEN CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1, 2)))) > 30000
?????????????????????????????????????????????????? THEN CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1, 2))))
??????????????????????????????????????????????????????? - POWER(2, 15)
?????????????????????????????????????????????????? ELSE CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1, 2))))
????????????????????????????????????????????? END )
??????????????????????????????????????????? - ( CASE WHEN CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1, 2)))) > 30000
????????????????????????????????????????????????????????? AND ISNULL(NULLIF(CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * ( ( leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1 ) )
????????????????????????????????????????????????????????????? - 1, 2)))), 0),
????????????????????????????????????????????????????????????? [VarColumnStart]) < 30000
???????????????????????????????????????????????????? THEN ( CASE
????????????????????????????????????????????????????????????? WHEN [system_type_id] IN (
????????????????????????????????????????????????????????????? 35, 34, 99 )
????????????????????????????????????????????????????????????? THEN 16
????????????????????????????????????????????????????????????? ELSE 24
??????????????????????????????????????????????????????????? END ) --24
???????????????????????????????????????????????????? WHEN CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1, 2)))) > 30000
????????????????????????????????????????????????????????? AND ISNULL(NULLIF(CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * ( ( leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1 ) )
????????????????????????????????????????????????????????????? - 1, 2)))), 0),
????????????????????????????????????????????????????????????? [VarColumnStart]) > 30000
???????????????????????????????????????????????????? THEN ( CASE
????????????????????????????????????????????????????????????? WHEN [system_type_id] IN (
????????????????????????????????????????????????????????????? 35, 34, 99 )
????????????????????????????????????????????????????????????? THEN 16
????????????????????????????????????????????????????????????? ELSE 24
??????????????????????????????????????????????????????????? END ) --24
???????????????????????????????????????????????????? WHEN CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1, 2)))) < 30000
????????????????????????????????????????????????????????? AND ISNULL(NULLIF(CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * ( ( leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1 ) )
????????????????????????????????????????????????????????????? - 1, 2)))), 0),
????????????????????????????????????????????????????????????? [VarColumnStart]) < 30000
???????????????????????????????????????????????????? THEN CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1, 2))))
????????????????????????????????????????????????????????? - ISNULL(NULLIF(CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * ( ( leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1 ) )
????????????????????????????????????????????????????????????? - 1, 2)))), 0),
????????????????????????????????????????????????????????????? [VarColumnStart])
???????????????????????????????????????????????????? WHEN CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1, 2)))) < 30000
????????????????????????????????????????????????????????? AND ISNULL(NULLIF(CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * ( ( leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1 ) )
????????????????????????????????????????????????????????????? - 1, 2)))), 0),
????????????????????????????????????????????????????????????? [VarColumnStart]) > 30000
???????????????????????????????????????????????????? THEN POWER(2, 15)
????????????????????????????????????????????????????????? + CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1, 2))))
????????????????????????????????????????????????????????? - ISNULL(NULLIF(CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * ( ( leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1 ) )
????????????????????????????????????????????????????????????? - 1, 2)))), 0),
????????????????????????????????????????????????????????????? [VarColumnStart])
??????????????????????????????????????????????? END ) ) + 1,
????????????????????????????????????????? ( CASE WHEN CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1, 2)))) > 30000
????????????????????????????????????????????????????? AND ISNULL(NULLIF(CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * ( ( leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1 ) )
????????????????????????????????????????????????????????????? - 1, 2)))), 0),
????????????????????????????????????????????????????????????? [VarColumnStart]) < 30000
???????????????????????????????????????????????? THEN ( CASE WHEN [system_type_id] IN (
????????????????????????????????????????????????????????????? 35, 34, 99 )
???????????????????????????????????????????????????????????? THEN 16
???????????????????????????????????????????????????????????? ELSE 24
??????????????????????????????????????????????????????? END ) --24
???????????????????????????????????????????????? WHEN CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1, 2)))) > 30000
????????????????????????????????????????????????????? AND ISNULL(NULLIF(CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * ( ( leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1 ) )
????????????????????????????????????????????????????????????? - 1, 2)))), 0),
????????????????????????????????????????????????????????????? [VarColumnStart]) > 30000
???????????????????????????????????????????????? THEN ( CASE WHEN [system_type_id] IN (
????????????????????????????????????????????????????????????? 35, 34, 99 )
???????????????????????????????????????????????????????????? THEN 16
???????????????????????????????????????????????????????????? ELSE 24
??????????????????????????????????????????????????????? END ) --24
???????????????????????????????????????????????? WHEN CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1, 2)))) < 30000
????????????????????????????????????????????????????? AND ISNULL(NULLIF(CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * ( ( leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1 ) )
????????????????????????????????????????????????????????????? - 1, 2)))), 0),
????????????????????????????????????????????????????????????? [VarColumnStart]) < 30000
???????????????????????????????????????????????? THEN ABS(CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1, 2))))
????????????????????????????????????????????????????????? - ISNULL(NULLIF(CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * ( ( leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1 ) )
????????????????????????????????????????????????????????????? - 1, 2)))), 0),
????????????????????????????????????????????????????????????? [VarColumnStart]))
???????????????????????????????????????????????? WHEN CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1, 2)))) < 30000
????????????????????????????????????????????????????? AND ISNULL(NULLIF(CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * ( ( leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1 ) )
????????????????????????????????????????????????????????????? - 1, 2)))), 0),
????????????????????????????????????????????????????????????? [VarColumnStart]) > 30000
???????????????????????????????????????????????? THEN POWER(2, 15)
????????????????????????????????????????????????????? + CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1, 2))))
????????????????????????????????????????????????????? - ISNULL(NULLIF(CONVERT(INT, CONVERT(BINARY(2), REVERSE(SUBSTRING([ColumnOffsetArray],
????????????????????????????????????????????????????????????? ( 2
????????????????????????????????????????????????????????????? * ( ( leaf_offset
????????????????????????????????????????????????????????????? * -1 ) - 1 ) )
????????????????????????????????????????????????????????????? - 1, 2)))), 0),
????????????????????????????????????????????????????????????? [VarColumnStart])
??????????????????????????????????????????? END ))
????????????????????? END ) AS hex_Value ,
??????????????????? [Slot ID] ,
??????????????????? 0
??????????? FROM??? @DeletedRecords A
??????????????????? INNER JOIN sys.allocation_units allocunits ON A.[AllocUnitId] = allocunits.[Allocation_Unit_Id]
??????????????????? INNER JOIN sys.partitions partitions ON ( allocunits.type IN (
????????????????????????????????????????????????????????????? 1, 3 )
????????????????????????????????????????????????????????????? AND partitions.hobt_id = allocunits.container_id
??????????????????????????????????????????????????????????? )
??????????????????????????????????????????????????????????? OR ( allocunits.type = 2
????????????????????????????????????????????????????????????? AND partitions.partition_id = allocunits.container_id
????????????????????????????????????????????????????????????? )
??????????????????? INNER JOIN sys.system_internals_partition_columns cols ON cols.partition_id = partitions.partition_id
??????????????????? LEFT OUTER JOIN syscolumns ON syscolumns.id = partitions.object_id
????????????????????????????????????????????????? AND syscolumns.colid = cols.partition_column_id
??????????? WHERE?? leaf_offset < 0
??????????? UNION
/*This part is for fixed data columns*/
??????????? SELECT? [Transaction ID] ,
??????????????????? [Row ID] ,
??????????????????? RowLogContents ,
??????????????????? NAME ,
??????????????????? cols.leaf_null_bit AS nullbit ,
??????????????????? leaf_offset ,
??????????????????? ISNULL(syscolumns.length, cols.max_length) AS [length] ,
??????????????????? cols.system_type_id ,
??????????????????? cols.leaf_bit_position AS bitpos ,
??????????????????? ISNULL(syscolumns.xprec, cols.precision) AS xprec ,
??????????????????? ISNULL(syscolumns.xscale, cols.scale) AS xscale ,
??????????????????? SUBSTRING([NullBitMap], cols.leaf_null_bit, 1) AS is_null ,
??????????????????? ( SELECT TOP 1
??????????????????????????????? ISNULL(SUM(CASE WHEN C.leaf_offset > 1
??????????????????????????????????????????????? THEN max_length
??????????????????????????????????????????????? ELSE 0
?????????????????????????????????????????? END), 0)
????????????????????? FROM????? sys.system_internals_partition_columns C
????????????????????? WHERE???? cols.partition_id = C.partition_id
??????????????????????????????? AND C.leaf_null_bit < cols.leaf_null_bit
??????????????????? ) + 5 AS [Column value Size] ,
??????????????????? syscolumns.length AS [Column Length] ,
??????????????????? CASE WHEN SUBSTRING([NullBitMap], cols.leaf_null_bit, 1) = 1
???????????????????????? THEN NULL
???????????????????????? ELSE SUBSTRING(RowLogContents,
??????????????????????????????????????? ( SELECT TOP 1
??????????????????????????????????????????????????? ISNULL(SUM(CASE
????????????????????????????????????????????????????????????? WHEN C.leaf_offset > 1
????????????????????????????????????????????????????????????? AND C.leaf_bit_position = 0
????????????????????????????????????????????????????????????? THEN max_length
????????????????????????????????????????????????????????????? ELSE 0
????????????????????????????????????????????????????????????? END), 0)
????????????????????????????????????????? FROM????? sys.system_internals_partition_columns C
????????????????????????????????????????? WHERE???? cols.partition_id = C.partition_id
??????????????????????????????????????????????????? AND C.leaf_null_bit < cols.leaf_null_bit
??????????????????????????????????????? ) + 5, syscolumns.length)
??????????????????? END AS hex_Value ,
??????????????????? [Slot ID] ,
??????????????????? 0
??????????? FROM??? @DeletedRecords A
??????????????????? INNER JOIN sys.allocation_units allocunits ON A.[AllocUnitId] = allocunits.[Allocation_Unit_Id]
??????????????????? INNER JOIN sys.partitions partitions ON ( allocunits.type IN (
????????????????????????????????????????????????????????????? 1, 3 )
????????????????????????????????????????????????????????????? AND partitions.hobt_id = allocunits.container_id
??????????????????????????????????????????????????????????? )
??????????????????????????????????????????????????????????? OR ( allocunits.type = 2
????????????????????????????????????????????????????????????? AND partitions.partition_id = allocunits.container_id
????????????????????????????????????????????????????????????? )
??????????????????? INNER JOIN sys.system_internals_partition_columns cols ON cols.partition_id = partitions.partition_id
??????????????????? LEFT OUTER JOIN syscolumns ON syscolumns.id = partitions.object_id
????????????????????????????????????????????????? AND syscolumns.colid = cols.partition_column_id
??????????? WHERE?? leaf_offset > 0
??????????? ORDER BY nullbit
?
??? DECLARE @BitColumnByte AS INT
??? SELECT? @BitColumnByte = CONVERT(INT, CEILING(COUNT(*) / 8.0))
??? FROM??? @ColumnNameAndData
??? WHERE?? [system_type_id] = 104;
??????? WITH??? N1 ( n )
????????????????? AS ( SELECT?? 1
?????????????????????? UNION ALL
?????????????????????? SELECT?? 1
???????????????????? ),
??????????????? N2 ( n )
????????????????? AS ( SELECT?? 1
?????????????????????? FROM???? N1 AS X ,
??????????????????????????????? N1 AS Y
???????????????????? ),
??????????????? N3 ( n )
????????????????? AS ( SELECT?? 1
?????????????????????? FROM???? N2 AS X ,
??????????????????????????????? N2 AS Y
???????????????????? ),
??????????????? N4 ( n )
????????????????? AS ( SELECT?? ROW_NUMBER() OVER ( ORDER BY X.n )
?????????????????????? FROM???? N3 AS X ,
??????????????????????????????? N3 AS Y
???????????????????? ),
??????????????? CTE
????????????????? AS ( SELECT?? RowLogContents ,
??????????????????????????????? [nullbit] ,
??????????????????????????????? [BitMap] = CONVERT(VARBINARY(1), CONVERT(INT, SUBSTRING(( REPLACE(STUFF(( SELECT
????????????????????????????????????????????????????????????? ','
????????????????????????????????????????????????????????????? + ( CASE
????????????????????????????????????????????????????????????? WHEN [ID] = 0
????????????????????????????????????????????????????????????? THEN CONVERT(NVARCHAR(1), ( SUBSTRING(hex_Value,
????????????????????????????????????????????????????????????? n, 1) % 2 ))
????????????????????????????????????????????????????????????? ELSE CONVERT(NVARCHAR(1), ( ( SUBSTRING(hex_Value,
????????????????????????????????????????????????????????????? n, 1)
????????????????????????????????????????????????????????????? / [Bitvalue] )
????????????????????????????????????????????????????????????? % 2 ))
????????????????????????????????????????????????????????????? END ) --as [NullBitMap]
????????????????????????????????????????????????????????????? FROM
????????????????????????????????????????????????????????????? N4 AS Nums
????????????????????????????????????????????????????????????? JOIN @ColumnNameAndData
????????????????????????????????????????????????????????????? AS C ON n <= @BitColumnByte
????????????????????????????????????????????????????????????? AND [system_type_id] = 104
????????????????????????????????????????????????????????????? AND bitpos = 0
????????????????????????????????????????????????????????????? CROSS JOIN @bitTable
????????????????????????????????????????????????????????????? WHERE
????????????????????????????????????????????????????????????? C.[RowLogContents] = D.[RowLogContents]
????????????????????????????????????????????????????????????? ORDER BY [RowLogContents] ,
????????????????????????????????????????????????????????????? n ASC
????????????????????????????????????????????????????????????? FOR
????????????????????????????????????????????????????????????? XML
????????????????????????????????????????????????????????????? PATH('')
????????????????????????????????????????????????????????????? ), 1, 1, ''),
????????????????????????????????????????????????????????????? ',', '') ),
????????????????????????????????????????????????????????????? bitpos + 1, 1)))
?????????????????????? FROM???? @ColumnNameAndData D
?????????????????????? WHERE??? [system_type_id] = 104
???????????????????? )
??????? UPDATE? A
??????? SET???? [hex_Value] = [BitMap]
??????? FROM??? @ColumnNameAndData A
??????????????? INNER JOIN CTE B ON A.[RowLogContents] = B.[RowLogContents]
??????????????????????????????????? AND A.[nullbit] = B.[nullbit]
?
?
/**************Check for BLOB DATA TYPES******************************/
??? DECLARE @Fileid INT
??? DECLARE @Pageid INT
??? DECLARE @Slotid INT
??? DECLARE @CurrentLSN INT
??? DECLARE @LinkID INT
??? DECLARE @Context VARCHAR(50)
??? DECLARE @ConsolidatedPageID VARCHAR(MAX)
??? DECLARE @LCX_TEXT_MIX VARBINARY(MAX)
?
??? DECLARE @temppagedata TABLE
??????? (
????????? [ParentObject] nvarchar(128) ,
????????? [Object] nvarchar(128) ,
????????? [Field] nvarchar(128) ,
????????? [Value] nvarchar(128)
??????? )
?
??? DECLARE @pagedata TABLE
??????? (
????????? [Page ID] nvarchar(128) ,
????????? [FILE IDS] INT ,
????????? [PAGE IDS] INT ,
????????? [AllocUnitId] BIGINT ,
????????? [ParentObject] nvarchar(128) ,
????????? [Object] nvarchar(128) ,
????????? [Field] nvarchar(128) ,
????????? [Value] nvarchar(128)
??????? )
?
??? DECLARE @ModifiedRawData TABLE
??????? (
????????? [ID] INT IDENTITY(1, 1) ,
????????? [PAGE ID] VARCHAR(MAX) ,
????????? [FILE IDS] INT ,
????????? [PAGE IDS] INT ,
????????? [Slot ID] INT ,
????????? [AllocUnitId] BIGINT ,
????????? [RowLog Contents 0_var] VARCHAR(MAX) ,
????????? [RowLog Length] VARCHAR(50) ,
????????? [RowLog Len] INT ,
????????? [RowLog Contents 0] VARBINARY(MAX) ,
????????? [LINK ID] INT DEFAULT ( 0 ) ,
????????? [Update] INT
??????? )
?
??? DECLARE Page_Data_Cursor CURSOR
??? FOR
??????? /*We need to filter LOP_MODIFY_ROW,LOP_MODIFY_COLUMNS from log for deleted records of BLOB data type& Get its Slot No, Page ID & AllocUnit ID*/
??????????? SELECT? LTRIM(RTRIM(REPLACE([Description], 'Deallocated', ''))) AS [PAGE ID] ,
??????????????????? [Slot ID] ,
??????????????????? [AllocUnitId] ,
??????????????????? NULL AS [RowLog Contents 0] ,
??????????????????? NULL AS [RowLog Contents 0] ,
??????????????????? Context
??????????? FROM??? sys.fn_dblog(NULL, NULL)
??????????? WHERE?? AllocUnitId IN (
??????????????????? SELECT? [Allocation_unit_id]
??????????????????? FROM??? sys.allocation_units allocunits
??????????????????????????? INNER JOIN sys.partitions partitions ON ( allocunits.type IN (
????????????????????????????????????????????????????????????? 1, 3 )
????????????????????????????????????????????????????????????? AND partitions.hobt_id = allocunits.container_id
????????????????????????????????????????????????????????????? )
????????????????????????????????????????????????????????????? OR ( allocunits.type = 2
????????????????????????????????????????????????????????????? AND partitions.partition_id = allocunits.container_id
????????????????????????????????????????????????????????????? )
??????????????????? WHERE?? object_id = OBJECT_ID('' + @SchemaName_n_TableName
????????????????????????????????????????????????? + '') )
??????????????????? AND Operation IN ( 'LOP_MODIFY_ROW' )
??????????????????? AND [Context] IN ( 'LCX_PFS' )
??????????????????? AND Description LIKE '%Deallocated%'
??????????? /*Use this subquery to filter the date*/
??????????????????? AND [TRANSACTION ID] IN (
??????????????????? SELECT DISTINCT
??????????????????????????? [TRANSACTION ID]
??????????????????? FROM??? sys.fn_dblog(NULL, NULL)
??????????????????? WHERE?? Context IN ( 'LCX_NULL' )
??????????????????????????? AND Operation IN ( 'LOP_BEGIN_XACT' )
??????????????????????????? AND [Transaction Name] IN ('DELETE', 'user_transaction')
??????????????????????????? AND CONVERT(NVARCHAR(11), [Begin Time]) BETWEEN @Date_From
????????????????????????????????????????????????????????????? AND
????????????????????????????????????????????????????????????? @Date_To )
??????????? GROUP BY [Description] ,
??????????????????? [Slot ID] ,
??????????????????? [AllocUnitId] ,
??????????????????? Context
??????????? UNION
??????????? SELECT? [PAGE ID] ,
??????????????????? [Slot ID] ,
??????????????????? [AllocUnitId] ,
??????????????????? SUBSTRING([RowLog Contents 0], 15,
????????????????????????????? LEN([RowLog Contents 0])) AS [RowLog Contents 0] ,
??????????????????? CONVERT(INT, SUBSTRING([RowLog Contents 0], 7, 2)) ,
??????????????????? Context --,CAST(RIGHT([Current LSN],4) AS INT) AS [Current LSN]
??????????? FROM??? sys.fn_dblog(NULL, NULL)
??????????? WHERE?? AllocUnitId IN (
??????????????????? SELECT? [Allocation_unit_id]
??????????????????? FROM??? sys.allocation_units allocunits
??????????????????????????? INNER JOIN sys.partitions partitions ON ( allocunits.type IN (
????????????????????????????????????????????????????????????? 1, 3 )
????????????????????????????????????????????????????????????? AND partitions.hobt_id = allocunits.container_id
????????????????????????????????????????????????????????????? )
????????????????????????????????????????????????????????????? OR ( allocunits.type = 2
????????????????????????????????????????????????????????????? AND partitions.partition_id = allocunits.container_id
????????????????????????????????????????????????????????????? )
??????????????????? WHERE?? object_id = OBJECT_ID('' + @SchemaName_n_TableName
????????????????????????????????????????????????? + '') )
??????????????????? AND Context IN ( 'LCX_TEXT_MIX' )
??????????????????? AND Operation IN ( 'LOP_DELETE_ROWS' )
??????????? /*Use this subquery to filter the date*/
??????????????????? AND [TRANSACTION ID] IN (
??????????????????? SELECT DISTINCT
??????????????????????????? [TRANSACTION ID]
??????????????????? FROM??? sys.fn_dblog(NULL, NULL)
??????????????????? WHERE?? Context IN ( 'LCX_NULL' )
??????????????????????????? AND Operation IN ( 'LOP_BEGIN_XACT' )
??????????????????????????? AND [Transaction Name] IN ('DELETE', 'user_transaction')
??????????????????????????? AND CONVERT(NVARCHAR(11), [Begin Time]) BETWEEN @Date_From
????????????????????????????????????????????????????????????? AND
????????????????????????????????????????????????????????????? @Date_To )
????????????????????????
??????????? /****************************************/
?
??? OPEN Page_Data_Cursor
?
??? FETCH NEXT FROM Page_Data_Cursor INTO @ConsolidatedPageID, @Slotid,
??????? @AllocUnitID, @LCX_TEXT_MIX, @LinkID, @Context
?
??? WHILE @@FETCH_STATUS = 0
??????? BEGIN
??????????? DECLARE @hex_pageid AS VARCHAR(MAX)
??????????? /*Page ID contains File Number and page number It looks like 0001:00000130.
????????????? In this example 0001 is file Number &? 00000130 is Page Number & These numbers are in Hex format*/
??????????? SET @Fileid = SUBSTRING(@ConsolidatedPageID, 0,
??????????????????????????????????? CHARINDEX(':', @ConsolidatedPageID)) -- Seperate File ID from Page ID
????????
??????????? SET @hex_pageid = '0x' + SUBSTRING(@ConsolidatedPageID,
?????????????????????????????????????????????? CHARINDEX(':',
???????????????????????????????????????????????????????? @ConsolidatedPageID)
?????????????????????????????????????????????? + 1, LEN(@ConsolidatedPageID))? ---Seperate the page ID
??????????? SELECT? @Pageid = CONVERT(INT, CAST('' AS XML).value('xs:hexBinary(substring(sql:variable("@hex_pageid"),sql:column("t.pos")) )',
????????????????????????????????????????????????????????????? 'varbinary(max)')) -- Convert Page ID from hex to integer
??????????? FROM??? ( SELECT??? CASE SUBSTRING(@hex_pageid, 1, 2)
????????????????????????????????? WHEN '0x' THEN 3
????????????????????????????????? ELSE 0
??????????????????????????????? END
??????????????????? ) AS t ( pos )
????????????
??????????? IF @Context = 'LCX_PFS'
??????????????? BEGIN
??????????????????? DELETE? @temppagedata
??????????????????? INSERT? INTO @temppagedata
??????????????????????????? EXEC
??????????????????????????????? ( 'DBCC PAGE(' + @Database_Name + ', '
????????????????????????????????? + @Fileid + ', ' + @Pageid
????????????????????????????????? + ', 1) with tableresults,no_infomsgs;'
??????????????????????????????? );
??????????????????? INSERT? INTO @pagedata
??????????????????????????? SELECT? @ConsolidatedPageID ,
??????????????????????????????????? @Fileid ,
??????????????????????????????????? @Pageid ,
??????????????????????????????????? @AllocUnitID ,
??????????????????????????????????? [ParentObject] ,
??????????????????????????????????? [Object] ,
??????????????????????????????????? [Field] ,
??????????????????????????????????? [Value]
??????????????????????????? FROM??? @temppagedata
??????????????? END
??????????? ELSE
??????????????? IF @Context = 'LCX_TEXT_MIX'
??????????????????? BEGIN
??????????????????????? INSERT? INTO @ModifiedRawData
??????????????????????????????? SELECT? @ConsolidatedPageID ,
??????????????????????????????????????? @Fileid ,
??????????????????????????????????????? @Pageid ,
??????????????????????????????????????? @Slotid ,
??????????????????????????????????????? @AllocUnitID ,
??????????????????????????????????????? NULL ,
??????????????????????????????????????? 0 ,
??????????????????????????????????????? CONVERT(INT, CONVERT(VARBINARY, REVERSE(SUBSTRING(@LCX_TEXT_MIX,
????????????????????????????????????????????????????????????? 11, 2)))) ,
??????????????????????????????????????? @LCX_TEXT_MIX ,
??????????????????????????????????????? @LinkID ,
??????????????????????????????????????? 0
??????????????????? END???
??????????? FETCH NEXT FROM Page_Data_Cursor INTO @ConsolidatedPageID, @Slotid,
??????????????? @AllocUnitID, @LCX_TEXT_MIX, @LinkID, @Context
??????? END
????
??? CLOSE Page_Data_Cursor
??? DEALLOCATE Page_Data_Cursor
?
??? DECLARE @Newhexstring VARCHAR(MAX);
?
??? --The data is in multiple rows in the page, so we need to convert it into one row as a single hex value.
??? --This hex value is in string format
??? INSERT? INTO @ModifiedRawData
??????????? ( [PAGE ID] ,
????????????? [FILE IDS] ,
????????????? [PAGE IDS] ,
????????????? [Slot ID] ,
????????????? [AllocUnitId] ,
????????????? [RowLog Contents 0_var] ,
????????????? [RowLog Length]
??????????? )
??????????? SELECT? [Page ID] ,
??????????????????? [FILE IDS] ,
??????????????????? [PAGE IDS] ,
??????????????????? SUBSTRING([ParentObject],
????????????????????????????? CHARINDEX('Slot', [ParentObject]) + 4,
????????????????????????????? ( CHARINDEX('Offset', [ParentObject])
??????????????????????????????? - ( CHARINDEX('Slot', [ParentObject]) + 4 ) )
????????????????????????????? - 2) AS [Slot ID] ,
??????????????????? [AllocUnitId] ,
??????????????????? SUBSTRING(( SELECT? REPLACE(STUFF(( SELECT
????????????????????????????????????????????????????????????? REPLACE(SUBSTRING([Value],
????????????????????????????????????????????????????????????? CHARINDEX(':',
????????????????????????????????????????????????????????????? [Value]) + 1,
????????????????????????????????????????????????????????????? CHARINDEX('?',
????????????????????????????????????????????????????????????? [Value])
????????????????????????????????????????????????????????????? - CHARINDEX(':',
????????????????????????????????????????????????????????????? [Value])), '?',
????????????????????????????????????????????????????????????? '')
??????????????????????????????????????????????????????? FROM? @pagedata C
??????????????????????????????????????????????????????? WHERE B.[Page ID] = C.[Page ID]
????????????????????????????????????????????????????????????? AND SUBSTRING(B.[ParentObject],
????????????????????????????????????????????????????????????? CHARINDEX('Slot',
????????????????????????????????????????????????????????????? B.[ParentObject])
????????????????????????????????????????????????????????????? + 4,
????????????????????????????????????????????????????????????? ( CHARINDEX('Offset',
????????????????????????????????????????????????????????????? B.[ParentObject])
????????????????????????????????????????????????????????????? - ( CHARINDEX('Slot',
????????????????????????????????????????????????????????????? B.[ParentObject])
????????????????????????????????????????????????????????????? + 4 ) )) = SUBSTRING(C.[ParentObject],
????????????????????????????????????????????????????????????? CHARINDEX('Slot',
????????????????????????????????????????????????????????????? C.[ParentObject])
????????????????????????????????????????????????????????????? + 4,
????????????????????????????????????????????????????????????? ( CHARINDEX('Offset',
????????????????????????????????????????????????????????????? C.[ParentObject])
????????????????????????????????????????????????????????????? - ( CHARINDEX('Slot',
????????????????????????????????????????????????????????????? C.[ParentObject])
????????????????????????????????????????????????????????????? + 4 ) ))
????????????????????????????????????????????????????????????? AND [Object] LIKE '%Memory Dump%'
??????????????????????????????????????????????????????? ORDER BY '0x'
????????????????????????????????????????????????????????????? + LEFT([Value],
????????????????????????????????????????????????????????????? CHARINDEX(':',
????????????????????????????????????????????????????????????? [Value]) - 1)
????????????????????????????????????????????????????? FOR
??????????????????????????????????????????????????????? XML PATH('')
????????????????????????????????????????????????????? ), 1, 1, ''), ' ', '')
????????????????????????????? ), 1, 20000) AS [Value] ,
??????????????????? SUBSTRING(( SELECT? '0x'
??????????????????????????????????????? + REPLACE(STUFF(( SELECT
????????????????????????????????????????????????????????????? REPLACE(SUBSTRING([Value],
????????????????????????????????????????????????????????????? CHARINDEX(':',
????????????????????????????????????????????????????????????? [Value]) + 1,
????????????????????????????????????????????????????????????? CHARINDEX('?',
????????????????????????????????????????????????????????????? [Value])
????????????????????????????????????????????????????????????? - CHARINDEX(':',
????????????????????????????????????????????????????????????? [Value])), '?',
????????????????????????????????????????????????????????????? '')
????????????????????????????????????????????????????????? FROM
????????????????????????????????????????????????????????????? @pagedata C
????????????????????????????????????????????????????????? WHERE
????????????????????????????????????????????????????????????? B.[Page ID] = C.[Page ID]
????????????????????????????????????????????????????????????? AND SUBSTRING(B.[ParentObject],
????????????????????????????????????????????????????????????? CHARINDEX('Slot',
????????????????????????????????????????????????????????????? B.[ParentObject])
????????????????????????????????????????????????????????????? + 4,
????????????????????????????????????????????????????????????? ( CHARINDEX('Offset',
????????????????????????????????????????????????????????????? B.[ParentObject])
????????????????????????????????????????????????????????????? - ( CHARINDEX('Slot',
????????????????????????????????????????????????????????????? B.[ParentObject])
????????????????????????????????????????????????????????????? + 4 ) )) = SUBSTRING(C.[ParentObject],
????????????????????????????????????????????????????????????? CHARINDEX('Slot',
????????????????????????????????????????????????????????????? C.[ParentObject])
????????????????????????????????????????????????????????????? + 4,
????????????????????????????????????????????????????????????? ( CHARINDEX('Offset',
????????????????????????????????????????????????????????????? C.[ParentObject])
????????????????????????????????????????????????????????????? - ( CHARINDEX('Slot',
????????????????????????????????????????????????????????????? C.[ParentObject])
????????????????????????????????????????????????????????????? + 4 ) ))
????????????????????????????????????????????????????????????? AND [Object] LIKE '%Memory Dump%'
????????????????????????????????????????????????????????? ORDER BY '0x'
????????????????????????????????????????????????????????????? + LEFT([Value],
????????????????????????????????????????????????????????????? CHARINDEX(':',
????????????????????????????????????????????????????????????? [Value]) - 1)
??????????????????????????????????????????????????????? FOR
????????????????????????????????????????????????????????? XML PATH('')
??????????????????????????????????????????????????????? ), 1, 1, ''), ' ', '')
????????????????????????????? ), 7, 4) AS [Length]
??????????? FROM??? @pagedata B
??????????? WHERE?? [Object] LIKE '%Memory Dump%'
??????????? GROUP BY [Page ID] ,
??????????????????? [FILE IDS] ,
??????????????????? [PAGE IDS] ,
??????????????????? [ParentObject] ,
??????????????????? [AllocUnitId]--,[Current LSN]
??????????? ORDER BY [Slot ID]
?
??? UPDATE? @ModifiedRawData
??? SET???? [RowLog Len] = CONVERT(VARBINARY(8000), REVERSE(CAST('' AS XML).value('xs:hexBinary(substring(sql:column("[RowLog Length]"),0))',
????????????????????????????????????????????????????????????? 'varbinary(Max)')))
??? FROM??? @ModifiedRawData
??? WHERE?? [LINK ID] = 0
?
??? UPDATE? @ModifiedRawData
??? SET???? [RowLog Contents 0] = CAST('' AS XML).value('xs:hexBinary(substring(sql:column("[RowLog Contents 0_var]"),0))',
??????????????????????????????????????????????????????? 'varbinary(Max)')
??? FROM??? @ModifiedRawData
??? WHERE?? [LINK ID] = 0
?
??? UPDATE? B
??? SET???? B.[RowLog Contents 0] = ( CASE WHEN A.[RowLog Contents 0] IS NOT NULL
??????????????????????????????????????????????? AND C.[RowLog Contents 0] IS NOT NULL
?????????????????????????????????????????? THEN A.[RowLog Contents 0]
??????????????????????????????????????????????? + C.[RowLog Contents 0]
?????????????????????????????????????????? WHEN A.[RowLog Contents 0] IS NULL
??????????????????????????????????????????????? AND C.[RowLog Contents 0] IS NOT NULL
?????????????????????????????????????????? THEN C.[RowLog Contents 0]
?????????????????????????????????????????? WHEN A.[RowLog Contents 0] IS NOT NULL
??????????????????????????????????????????????? AND C.[RowLog Contents 0] IS NULL
?????????????????????????????????????????? THEN A.[RowLog Contents 0]
????????????????????????????????????? END ) ,
??????????? B.[Update] = ISNULL(B.[Update], 0) + 1
??? FROM??? @ModifiedRawData B
??????????? LEFT JOIN @ModifiedRawData A ON A.[PAGE IDS] = CONVERT(INT, CONVERT(VARBINARY(MAX), REVERSE(SUBSTRING(B.[RowLog Contents 0],
????????????????????????????????????????????????????????????? 15 + 14, 2))))
??????????????????????????????????????????? AND A.[FILE IDS] = CONVERT(INT, CONVERT(VARBINARY(MAX), REVERSE(SUBSTRING(B.[RowLog Contents 0],
????????????????????????????????????????????????????????????? 19 + 14, 2))))
??????????????????????????????????????????? AND A.[LINK ID] = B.[LINK ID]
??????????? LEFT JOIN @ModifiedRawData C ON C.[PAGE IDS] = CONVERT(INT, CONVERT(VARBINARY(MAX), REVERSE(SUBSTRING(B.[RowLog Contents 0],
????????????????????????????????????????????????????????????? 27 + 14, 2))))
??????????????????????????????????????????? AND C.[FILE IDS] = CONVERT(INT, CONVERT(VARBINARY(MAX), REVERSE(SUBSTRING(B.[RowLog Contents 0],
????????????????????????????????????????????????????????????? 31 + 14, 2))))
??????????????????????????????????????????? AND C.[LINK ID] = B.[LINK ID]
??? WHERE?? ( A.[RowLog Contents 0] IS NOT NULL
????????????? OR C.[RowLog Contents 0] IS NOT NULL
??????????? )
?
?
??? UPDATE? B
??? SET???? B.[RowLog Contents 0] = ( CASE WHEN A.[RowLog Contents 0] IS NOT NULL
??????????????????????????????????????????????? AND C.[RowLog Contents 0] IS NOT NULL
?????????????????????????????????????????? THEN A.[RowLog Contents 0]
??????????????????????????????????????????????? + C.[RowLog Contents 0]
?????????????????????????????????????????? WHEN A.[RowLog Contents 0] IS NULL
??????????????????????????????????????????????? AND C.[RowLog Contents 0] IS NOT NULL
?????????????????????????????????????????? THEN C.[RowLog Contents 0]
?????????????????????????????????????????? WHEN A.[RowLog Contents 0] IS NOT NULL
??????????????????????????????????????????????? AND C.[RowLog Contents 0] IS NULL
?????????????????????????????????????????? THEN A.[RowLog Contents 0]
????????????????????????????????????? END )
??? --,B.[Update]=ISNULL(B.[Update],0)+1
??? FROM??? @ModifiedRawData B
??????????? LEFT JOIN @ModifiedRawData A ON A.[PAGE IDS] = CONVERT(INT, CONVERT(VARBINARY(MAX), REVERSE(SUBSTRING(B.[RowLog Contents 0],
????????????????????????????????????????????????????????????? 15 + 14, 2))))
??????????????????????????????????????????? AND A.[FILE IDS] = CONVERT(INT, CONVERT(VARBINARY(MAX), REVERSE(SUBSTRING(B.[RowLog Contents 0],
????????????????????????????????????????????????????????????? 19 + 14, 2))))
??????????????????????????????????????????? AND A.[LINK ID] <> B.[LINK ID]
??????????????????????????????????????????? AND B.[Update] = 0
??????????? LEFT JOIN @ModifiedRawData C ON C.[PAGE IDS] = CONVERT(INT, CONVERT(VARBINARY(MAX), REVERSE(SUBSTRING(B.[RowLog Contents 0],
????????????????????????????????????????????????????????????? 27 + 14, 2))))
??????????????????????????????????????????? AND C.[FILE IDS] = CONVERT(INT, CONVERT(VARBINARY(MAX), REVERSE(SUBSTRING(B.[RowLog Contents 0],
????????????????????????????????????????????????????????????? 31 + 14, 2))))
??????????????????????????????????????????? AND C.[LINK ID] <> B.[LINK ID]
??????????????????????????????????????????? AND B.[Update] = 0
??? WHERE?? ( A.[RowLog Contents 0] IS NOT NULL
????????????? OR C.[RowLog Contents 0] IS NOT NULL
??????????? )
?
??? UPDATE? @ModifiedRawData
??? SET???? [RowLog Contents 0] = ( CASE WHEN [RowLog Len] >= 8000
???????????????????????????????????????? THEN SUBSTRING([RowLog Contents 0],
??????????????????????????????????????????????????????? 15, [RowLog Len])
???????????????????????????????????????? WHEN [RowLog Len] < 8000
???????????????????????????????????????? THEN SUBSTRING([RowLog Contents 0],
??????????????????????????????????????????????????????? 15 + 6,
??????????????????????????????????????????????????????? CONVERT(INT, CONVERT(VARBINARY(MAX), REVERSE(SUBSTRING([RowLog Contents 0],
????????????????????????????????????????????????????????????? 15, 6)))))
??????????????????????????????????? END )
??? FROM??? @ModifiedRawData
??? WHERE?? [LINK ID] = 0
?
??? UPDATE? @ColumnNameAndData
??? SET???? [hex_Value] = [RowLog Contents 0]
??? --,A.[Update]=A.[Update]+1
??? FROM??? @ColumnNameAndData A
??????????? INNER JOIN @ModifiedRawData B ON CONVERT(INT, CONVERT(VARBINARY(MAX), REVERSE(SUBSTRING([hex_Value],
????????????????????????????????????????????????????????????? 17, 4)))) = [PAGE IDS]
???????????????????????????????????????????? AND CONVERT(INT, SUBSTRING([hex_Value],
????????????????????????????????????????????????????????????? 9, 2)) = B.[LINK ID]
??? WHERE?? [system_type_id] IN ( 99, 167, 175, 231, 239, 241, 165, 98 )
??????????? AND [LINK ID] <> 0
?
??? UPDATE? @ColumnNameAndData
??? SET???? [hex_Value] = ( CASE WHEN B.[RowLog Contents 0] IS NOT NULL
????????????????????????????????????? AND C.[RowLog Contents 0] IS NOT NULL
???????????????????????????????? THEN B.[RowLog Contents 0]
????????????????????????????????????? + C.[RowLog Contents 0]
???????????????????????????????? WHEN B.[RowLog Contents 0] IS NULL
????????????????????????????????????? AND C.[RowLog Contents 0] IS NOT NULL
???????????????????????????????? THEN C.[RowLog Contents 0]
???????????????????????????????? WHEN B.[RowLog Contents 0] IS NOT NULL
????????????????????????????????????? AND C.[RowLog Contents 0] IS NULL
???????????????????????????????? THEN B.[RowLog Contents 0]
??????????????????????????? END )
??? --,A.[Update]=A.[Update]+1
??? FROM??? @ColumnNameAndData A
??????????? LEFT JOIN @ModifiedRawData B ON CONVERT(INT, CONVERT(VARBINARY(MAX), REVERSE(SUBSTRING([hex_Value],
????????????????????????????????????????????????????????????? 5, 4)))) = B.[PAGE IDS]
??????????????????????????????????????????? AND B.[LINK ID] = 0
??????????? LEFT JOIN @ModifiedRawData C ON CONVERT(INT, CONVERT(VARBINARY(MAX), REVERSE(SUBSTRING([hex_Value],
????????????????????????????????????????????????????????????? 17, 4)))) = C.[PAGE IDS]
??????????????????????????????????????????? AND C.[LINK ID] = 0
??? WHERE?? [system_type_id] IN ( 99, 167, 175, 231, 239, 241, 165, 98 )
??????????? AND ( B.[RowLog Contents 0] IS NOT NULL
????????????????? OR C.[RowLog Contents 0] IS NOT NULL
??????????????? )
?
??? UPDATE? @ColumnNameAndData
??? SET???? [hex_Value] = [RowLog Contents 0]
??? --,A.[Update]=A.[Update]+1
??? FROM??? @ColumnNameAndData A
??????????? INNER JOIN @ModifiedRawData B ON CONVERT(INT, CONVERT(VARBINARY(MAX), REVERSE(SUBSTRING([hex_Value],
????????????????????????????????????????????????????????????? 9, 4)))) = [PAGE IDS]
???????????????????????????????????????????? AND CONVERT(INT, SUBSTRING([hex_Value],
????????????????????????????????????????????????????????????? 3, 2)) = [LINK ID]
??? WHERE?? [system_type_id] IN ( 35, 34, 99 )
??????????? AND [LINK ID] <> 0
????
??? UPDATE? @ColumnNameAndData
??? SET???? [hex_Value] = [RowLog Contents 0]
??? --,A.[Update]=A.[Update]+10
??? FROM??? @ColumnNameAndData A
??????????? INNER JOIN @ModifiedRawData B ON CONVERT(INT, CONVERT(VARBINARY(MAX), REVERSE(SUBSTRING([hex_Value],
????????????????????????????????????????????????????????????? 9, 4)))) = [PAGE IDS]
??? WHERE?? [system_type_id] IN ( 35, 34, 99 )
??????????? AND [LINK ID] = 0
?
??? UPDATE? @ColumnNameAndData
??? SET???? [hex_Value] = [RowLog Contents 0]
??? --,A.[Update]=A.[Update]+1
??? FROM??? @ColumnNameAndData A
??????????? INNER JOIN @ModifiedRawData B ON CONVERT(INT, CONVERT(VARBINARY(MAX), REVERSE(SUBSTRING([hex_Value],
????????????????????????????????????????????????????????????? 15, 4)))) = [PAGE IDS]
??? WHERE?? [system_type_id] IN ( 35, 34, 99 )
??????????? AND [LINK ID] = 0
?
??? UPDATE? @ColumnNameAndData
??? SET???? [hex_Value] = 0xFFFE + SUBSTRING([hex_Value], 9, LEN([hex_Value]))
??? --,[Update]=[Update]+1
??? WHERE?? [system_type_id] = 241
?
??? CREATE TABLE [#temp_Data]
??????? (
????????? [FieldName] VARCHAR(MAX) ,
????????? [FieldValue] NVARCHAR(MAX) ,
????????? [RowLogContents] VARBINARY(8000) ,
????????? [Row ID] INT ,
????????? [Transaction ID] VARCHAR(100) ,
????????? [Deletion Date Time] DATETIME ,
????????? [Deleted By User Name] VARCHAR(MAX)
??????? )
?
??? INSERT? INTO #temp_Data
??????????? SELECT? NAME ,
??????????????????? CASE WHEN system_type_id IN ( 231, 239 )
???????????????????????? THEN LTRIM(RTRIM(CONVERT(NVARCHAR(MAX), hex_Value)))? --NVARCHAR ,NCHAR
???????????????????????? WHEN system_type_id IN ( 167, 175 )
???????????????????????? THEN LTRIM(RTRIM(CONVERT(VARCHAR(MAX), hex_Value)))? --VARCHAR,CHAR
???????????????????????? WHEN system_type_id IN ( 35 )
???????????????????????? THEN LTRIM(RTRIM(CONVERT(VARCHAR(MAX), hex_Value))) --Text
???????????????????????? WHEN system_type_id IN ( 99 )
???????????????????????? THEN LTRIM(RTRIM(CONVERT(NVARCHAR(MAX), hex_Value))) --nText
???????????????????????? WHEN system_type_id = 48
???????????????????????? THEN CONVERT(VARCHAR(MAX), CONVERT(TINYINT, CONVERT(BINARY(1), REVERSE(hex_Value)))) --TINY INTEGER
???????????????????????? WHEN system_type_id = 52
???????????????????????? THEN CONVERT(VARCHAR(MAX), CONVERT(SMALLINT, CONVERT(BINARY(2), REVERSE(hex_Value)))) --SMALL INTEGER
???????????????????????? WHEN system_type_id = 56
???????????????????????? THEN CONVERT(VARCHAR(MAX), CONVERT(INT, CONVERT(BINARY(4), REVERSE(hex_Value)))) -- INTEGER
???????????????????????? WHEN system_type_id = 127
???????????????????????? THEN CONVERT(VARCHAR(MAX), CONVERT(BIGINT, CONVERT(BINARY(8), REVERSE(hex_Value))))-- BIG INTEGER
???????????????????????? WHEN system_type_id = 61
???????????????????????? THEN CONVERT(VARCHAR(MAX), CONVERT(DATETIME, CONVERT(VARBINARY(8000), REVERSE(hex_Value))), 100) --DATETIME
???????????????????????? WHEN system_type_id = 58
???????????????????????? THEN CONVERT(VARCHAR(MAX), CONVERT(SMALLDATETIME, CONVERT(VARBINARY(8000), REVERSE(hex_Value))), 100) --SMALL DATETIME
???????????????????????? WHEN system_type_id = 108
???????????????????????? THEN CONVERT(VARCHAR(MAX), CONVERT(NUMERIC(38, 20), CONVERT(VARBINARY, CONVERT(VARBINARY(1), xprec)
????????????????????????????? + CONVERT(VARBINARY(1), xscale))
????????????????????????????? + CONVERT(VARBINARY(1), 0) + hex_Value)) --- NUMERIC
???????????????????????? WHEN system_type_id = 106
???????????????????????? THEN CONVERT(VARCHAR(MAX), CONVERT(DECIMAL(38, 20), CONVERT(VARBINARY, CONVERT(VARBINARY(1), xprec)
????????????????????????????? + CONVERT(VARBINARY(1), xscale))
????????????????????????????? + CONVERT(VARBINARY(1), 0) + hex_Value)) --- DECIMAL
???????????????????????? WHEN system_type_id IN ( 60, 122 )
???????????????????????? THEN CONVERT(VARCHAR(MAX), CONVERT(MONEY, CONVERT(VARBINARY(8000), REVERSE(hex_Value))), 2) --MONEY,SMALLMONEY
???????????????????????? WHEN system_type_id = 104
???????????????????????? THEN CONVERT(VARCHAR(MAX), CONVERT (BIT, CONVERT(BINARY(1), hex_Value)
????????????????????????????? % 2))? -- BIT
???????????????????????? WHEN system_type_id = 62
???????????????????????? THEN RTRIM(LTRIM(STR(CONVERT(FLOAT, SIGN(CAST(CONVERT(VARBINARY(8000), REVERSE(hex_Value)) AS BIGINT))
????????????????????????????????????????????? * ( 1.0
????????????????????????????????????????????????? + ( CAST(CONVERT(VARBINARY(8000), REVERSE(hex_Value)) AS BIGINT)
????????????????????????????????????????????????????? & 0x000FFFFFFFFFFFFF )
????????????????????????????????????????????????? * POWER(CAST(2 AS FLOAT),
????????????????????????????????????????????????????????? -52) )
????????????????????????????????????????????? * POWER(CAST(2 AS FLOAT),
????????????????????????????????????????????????????? ( ( CAST(CONVERT(VARBINARY(8000), REVERSE(hex_Value)) AS BIGINT)
????????????????????????????????????????????????????????? & 0x7ff0000000000000 )
??????????????????????????????????????????????????????? / EXP(52 * LOG(2))
??????????????????????????????????????????????????????? - 1023 ))), 53,
????????????????????????????????????????????? LEN(hex_Value)))) --- FLOAT
???????????????????????? WHEN system_type_id = 59
???????????????????????? THEN LEFT(LTRIM(STR(CAST(SIGN(CAST(CONVERT(VARBINARY(8000), REVERSE(hex_Value)) AS BIGINT))
???????????????????????????????????????????? * ( 1.0
???????????????????????????????????????????????? + ( CAST(CONVERT(VARBINARY(8000), REVERSE(hex_Value)) AS BIGINT)
???????????????????????????????????????????????????? & 0x007FFFFF )
???????????????????????????????????????????????? * POWER(CAST(2 AS REAL), -23) )
???????????????????????????????????????????? * POWER(CAST(2 AS REAL),
???????????????????????????????????????????????????? ( ( ( CAST(CONVERT(VARBINARY(8000), REVERSE(hex_Value)) AS INT) )
???????????????????????????????????????????????????????? & 0x7f800000 )
?????????????????????????????????????????????????????? / EXP(23 * LOG(2))
?????????????????????????????????????????????????????? - 127 )) AS REAL), 23,
???????????????????????????????????????????? 23)), 8) --Real
???????????????????????? WHEN system_type_id IN ( 165, 173 )
???????????????????????? THEN ( CASE WHEN CHARINDEX(0x,
??????????????????????????????????????????????????? CAST('' AS XML).value('xs:hexBinary(sql:column("hex_Value"))',
????????????????????????????????????????????????????????????? 'VARBINARY(8000)')) = 0
???????????????????????????????????? THEN '0x'
???????????????????????????????????? ELSE ''
??????????????????????????????? END ) + CAST('' AS XML).value('xs:hexBinary(sql:column("hex_Value"))',
????????????????????????????????????????????????????????????? 'varchar(max)') -- BINARY,VARBINARY
???????????????????????? WHEN system_type_id = 34
???????????????????????? THEN ( CASE WHEN CHARINDEX(0x,
??????????????????????????????????????????????????? CAST('' AS XML).value('xs:hexBinary(sql:column("hex_Value"))',
????????????????????????????????????????????????????????????? 'VARBINARY(8000)')) = 0
???????????????????????????????????? THEN '0x'
???????????????????????????????????? ELSE ''
??????????????????????????????? END ) + CAST('' AS XML).value('xs:hexBinary(sql:column("hex_Value"))',
????????????????????????????????????????????????????????????? 'varchar(max)')? --IMAGE
???????????????????????? WHEN system_type_id = 36
???????????????????????? THEN CONVERT(VARCHAR(MAX), CONVERT(UNIQUEIDENTIFIER, hex_Value)) --UNIQUEIDENTIFIER
???????????????????????? WHEN system_type_id = 231
???????????????????????? THEN CONVERT(VARCHAR(MAX), CONVERT(nvarchar(128), hex_Value)) --nvarchar(128)
???????????????????????? WHEN system_type_id = 241
???????????????????????? THEN CONVERT(VARCHAR(MAX), CONVERT(XML, hex_Value)) --XML
???????????????????????? WHEN system_type_id = 189
???????????????????????? THEN ( CASE WHEN CHARINDEX(0x,
??????????????????????????????????????????????????? CAST('' AS XML).value('xs:hexBinary(sql:column("hex_Value"))',
????????????????????????????????????????????????????????????? 'VARBINARY(8000)')) = 0
???????????????????????????????????? THEN '0x'
???????????????????????????????????? ELSE ''
??????????????????????????????? END ) + CAST('' AS XML).value('xs:hexBinary(sql:column("hex_Value"))',
????????????????????????????????????????????????????????????? 'varchar(max)') --TIMESTAMP
???????????????????????? WHEN system_type_id = 98
???????????????????????? THEN ( CASE WHEN CONVERT(INT, SUBSTRING(hex_Value, 1,
????????????????????????????????????????????????????????????? 1)) = 56
???????????????????????????????????? THEN CONVERT(VARCHAR(MAX), CONVERT(INT, CONVERT(BINARY(4), REVERSE(SUBSTRING(hex_Value,
????????????????????????????????????????????????????????????? 3,
????????????????????????????????????????????????????????????? LEN(hex_Value))))))? -- INTEGER
???????????????????????????????????? WHEN CONVERT(INT, SUBSTRING(hex_Value, 1,
????????????????????????????????????????????????????????????? 1)) = 108
???????????????????????????????????? THEN CONVERT(VARCHAR(MAX), CONVERT(NUMERIC(38,
????????????????????????????????????????????????????????????? 20), CONVERT(VARBINARY(1), SUBSTRING(hex_Value,
????????????????????????????????????????????????????????????? 3, 1))
????????????????????????????????????????? + CONVERT(VARBINARY(1), SUBSTRING(hex_Value,
????????????????????????????????????????????????????????????? 4, 1))
????????????????????????????????????????? + CONVERT(VARBINARY(1), 0)
????????????????????????????????????????? + SUBSTRING(hex_Value, 5,
????????????????????????????????????????????????????? LEN(hex_Value)))) --- NUMERIC
???????????????????????????????????? WHEN CONVERT(INT, SUBSTRING(hex_Value, 1,
????????????????????????????????????????????????????????????? 1)) = 167
???????????????????????????????????? THEN LTRIM(RTRIM(CONVERT(VARCHAR(MAX), SUBSTRING(hex_Value,
????????????????????????????????????????????????????????????? 9,
????????????????????????????????????????????????????????????? LEN(hex_Value))))) --VARCHAR,CHAR
???????????????????????????????????? WHEN CONVERT(INT, SUBSTRING(hex_Value, 1,
????????????????????????????????????????????????????????????? 1)) = 36
???????????????????????????????????? THEN CONVERT(VARCHAR(MAX), CONVERT(UNIQUEIDENTIFIER, SUBSTRING(( hex_Value ),
????????????????????????????????????????????????????????????? 3, 20))) --UNIQUEIDENTIFIER
???????????????????????????????????? WHEN CONVERT(INT, SUBSTRING(hex_Value, 1,
????????????????????????????????????????????????????????????? 1)) = 61
???????????????????????????????????? THEN CONVERT(VARCHAR(MAX), CONVERT(DATETIME, CONVERT(VARBINARY(8000), REVERSE(SUBSTRING(hex_Value,
????????????????????????????????????????????????????????????? 3,
????????????????????????????????????????????????????????????? LEN(hex_Value))))), 100) --DATETIME
???????????????????????????????????? WHEN CONVERT(INT, SUBSTRING(hex_Value, 1,
????????????????????????????????????????????????????????????? 1)) = 165
???????????????????????????????????? THEN '0x'
????????????????????????????????????????? + SUBSTRING(( CASE WHEN CHARINDEX(0x,
????????????????????????????????????????????????????????????? CAST('' AS XML).value('xs:hexBinary(sql:column("hex_Value"))',
????????????????????????????????????????????????????????????? 'VARBINARY(8000)')) = 0
???????????????????????????????????????????????????????????? THEN '0x'
???????????????????????????????????????????????????????????? ELSE ''
??????????????????????????????????????????????????????? END )
????????????????????????????????????????????????????? + CAST('' AS XML).value('xs:hexBinary(sql:column("hex_Value"))',
????????????????????????????????????????????????????????????? 'varchar(max)'),
????????????????????????????????????????????????????? 11, LEN(hex_Value)) -- BINARY,VARBINARY
??????????????????????????????? END )
??????????????????? END AS FieldValue ,
??????????????????? [RowLogContents] ,
??????????????????? [Row ID] ,
??????????????????? [Transaction ID] ,
??????????????????? NULL ,
??????????????????? NULL
??????????? FROM??? @ColumnNameAndData
??????????? ORDER BY nullbit
?
--Find the user ID and date time
??? UPDATE? #temp_Data
??? SET???? [Deleted By User Name] = SUSER_SNAME(B.[Transaction SID]),
??????????? [Deletion Date Time] = [Begin Time]
??? FROM??? #temp_Data A
??????????? INNER JOIN fn_dblog(NULL, NULL) B ON A.[Transaction ID] = B.[Transaction ID]
??? WHERE?? B.[Operation] = 'LOP_BEGIN_XACT'
??????????? AND B.[Context] = 'LCX_NULL'
??????????? AND B.[Transaction Name] IN ('DELETE', 'user_transaction')
?
--Create the column name in the same order to do pivot table.
?
??? DECLARE @FieldName VARCHAR(MAX)
??? DECLARE @AdditionalField VARCHAR(MAX)
??? SET @FieldName = STUFF(( SELECT ','
??????????????????????????????????? + CAST(QUOTENAME([Name]) AS VARCHAR(MAX))
???????????????????????????? FROM?? syscolumns
???????????????????????????? WHERE? id = OBJECT_ID(''
?????????????????????????????????????????????????? + @SchemaName_n_TableName
?????????????????????????????????????????????????? + '')
?????????????????????????? FOR
???????????????????????????? XML PATH('')
?????????????????????????? ), 1, 1, '')
?
--Finally did pivot table and get the data back in the same format.
?
??? SET @AdditionalField = @FieldName
??????? + ' ,[Deleted By User Name],[Deletion Date Time]'
?
??? SET @SQL = 'SELECT ' + @AdditionalField
??????? + ' FROM #temp_Data PIVOT (Min([FieldValue]) FOR FieldName IN ('
??????? + @FieldName + ')) AS pvt'
??? PRINT @SQL
??? EXEC sp_executesql @SQL
?
GO

Create Table tbl_Sample
([ID] int identity(1,1) ,
[Name] varchar(50),
[T1] int)
GO
Insert into tbl_Sample values ('Letter A', 11)
Insert into tbl_Sample values ('Letter B', 22)
Insert into tbl_Sample values ('Letter C', 33)
?
Select * from tbl_Sample
DELETE FROM tbl_Sample

--Execute the procedure like
--Recover_Deleted_Data_With_UID_Date_Time_Proc 'Database Name','Schema.table name'
--EXAMPLE #1 : FOR ALL DELETED RECORDS
EXEC Recover_Deleted_Data_With_UID_Date_Time_Proc? 'dbo.tbl_Sample'
GO
--EXAMPLE #2 : FOR ANY SPECIFIC DATE RANGE
EXEC Recover_Deleted_Data_With_UID_Date_Time_Proc? 'dbo.tbl_Sample' ,'2013/11/09','2013/11/09'
--It will give you the result of all deleted records with the user name and date & time of deletion.

SELECT? [Begin Time], * FROM fn_dblog(null, NULL)
WHERE? Context IN ( 'LCX_MARK_AS_GHOST', 'LCX_HEAP' )
??????????????????????????? AND Operation IN ( 'LOP_DELETE_ROWS' )
??????????????????????????? AND SUBSTRING([RowLog Contents 0], 1, 1) IN ( 0x10,
????????????????????????????????????????????????????????????? 0x30, 0x70 )

轉載于:https://www.cnblogs.com/qanholas/p/3415835.html

總結

以上是生活随笔為你收集整理的UNdelete的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产成人精品亚洲a | av片免费播放 | 欧美男女爱爱视频 | 国产专区精品 | 伊人va| 亚洲五月 | 欧美大jb| 久久久久国产精品一区 | 在线观看黄污 | 免费国产在线观看 | 亚洲午夜精品一区二区三区电影院 | 人人躁 | 午夜视频在线观看网站 | 日韩精品偷拍 | 超碰97人人射妻 | 波多野结衣精品视频 | 六月久久婷婷 | 丁香婷婷激情五月 | 69视频在线 | 国产一区二区三区免费在线 | 成人久久18免费网站 | 日韩字幕 | 欧美日韩视频在线观看一区二区 | 成年在线观看 | 99riav1国产精品视频 | 99av国产精品欲麻豆 | 色综合久久综合网 | 射射色| 欧美超碰在线 | 人人插人人玩 | 超碰97成人 | 91精品国产91久久久久福利 | 中文字幕在线免费播放 | 国产精品av电影 | 中文字幕一区av | 日一日干一干 | 久久精品这里精品 | 国产一区视频在线观看免费 | 日韩久久久久久久久 | 色噜噜狠狠狠狠色综合久不 | 精品毛片久久久久久 | 九色精品在线 | 久久久久久国产一区二区三区 | 国产一在线精品一区在线观看 | 毛片永久免费 | 免费a v视频 | 日韩在线观看a | 国语自产偷拍精品视频偷 | 91精品在线看 | 欧美日韩在线观看一区二区 | 国产亚洲成av人片在线观看桃 | 国产第一页福利影院 | 欧美久久成人 | 色黄视频免费观看 | 亚洲jizzjizz日本少妇 | 久久久久久久久久网 | 婷婷六月中文字幕 | 精品黄色片 | 96av麻豆蜜桃一区二区 | 国产精品美女久久久久久久网站 | 精品久久久久久国产偷窥 | 玖玖在线免费视频 | 中文字幕在线观看第一页 | 美女免费网站 | 成年人视频在线免费观看 | 欧美二区在线播放 | 91伊人久久大香线蕉蜜芽人口 | 欧美色插 | 99视频在线免费 | 久久亚洲美女 | 欧美性护士 | 狂野欧美激情性xxxx欧美 | 国产韩国日本高清视频 | 国产视频在 | 激情综合五月天 | 日韩精品一区二区三区水蜜桃 | 国产成人av免费在线观看 | 欧美夫妻性生活电影 | 成人欧美亚洲 | 国产精品破处视频 | 99性视频 | 日韩在线观看网址 | 日韩一级片观看 | av免费在线播放 | 高清av中文在线字幕观看1 | 成 人 黄 色视频免费播放 | 成人超碰在线 | 又黄又刺激的网站 | 国产综合在线视频 | 久久狠狠一本精品综合网 | 国产精品一区二区在线免费观看 | 五月综合网站 | 亚洲va在线va天堂va偷拍 | 丁香五婷 | 97视频在线免费 | 欧美看片| 婷色在线 | 视频在线观看国产 | 开心激情综合网 | 成人免费视频在线观看 | 久久久久夜色 | 99热国产在线观看 | 国产一级二级在线播放 | 午夜精品久久久久久久久久久 | 免费视频一级片 | 日韩av成人在线 | 91精品夜夜 | 亚洲精品国精品久久99热一 | 最新日韩在线观看视频 | 午夜私人影院久久久久 | 久久久在线 | 欧美一区二区精品在线 | 91在线视频播放 | 亚洲专区 国产精品 | 玖玖精品视频 | 五月天视频网站 | 九九视频免费在线观看 | 日韩av在线一区二区 | 一二三区视频在线 | 久久成人免费 | 欧美五月婷婷 | 黄色av影院 | 激情在线网站 | 日韩视频中文字幕 | 99九九视频 | 日韩理论 | av中文在线播放 | 久久精品久久久久久久 | 免费视频在线观看网站 | 欧美日韩高清一区 | 五月婷婷伊人网 | 国产精品久久99精品毛片三a | 欧美另类交在线观看 | 国产第一页精品 | 中文字幕在线观看av | 最新三级在线 | 精品一区免费 | 黄a网站 | 日韩av电影手机在线观看 | 国产在线欧美在线 | 欧美一区二区三区四区夜夜大片 | av免费看在线 | 精品久久久久久综合日本 | 国产一区福利在线 | 五月丁婷婷| 久久久久久久久久久久电影 | 欧美日韩1区2区 | 免费成人在线电影 | 色姑娘综合天天 | 97人人艹 | 久久婷亚洲五月一区天天躁 | 中文日韩在线视频 | 久久综合五月天婷婷伊人 | 伊人久在线 | 国产中文在线观看 | 国产在线自 | 在线观看精品 | 国产一区免费视频 | 国产三级午夜理伦三级 | 人人讲下载 | 91在线九色 | 超碰97国产 | 奇米网网址 | 久久桃花网 | 97视频在线观看网址 | www.五月天| 毛片1000部免费看 | 曰本免费av | 国产69精品久久99不卡的观看体验 | 免费成人在线视频网站 | 久久久久欠精品国产毛片国产毛生 | 日韩色一区二区三区 | 国产在线精品区 | 在线亚洲成人 | 香蕉久草在线 | 日韩一区二区三免费高清在线观看 | 992tv人人网tv亚洲精品 | 亚洲伦理精品 | 九九热精品在线 | 精品一区二区亚洲 | 最新高清无码专区 | 免费a视频在线 | 日韩高清av | 色av婷婷| 99视频免费 | 伊人伊成久久人综合网小说 | 国产成人一二片 | av电影不卡在线 | 亚洲国产小视频在线观看 | 日韩欧美视频在线 | 欧美一级黄色视屏 | 一区二区三区影院 | 日韩精品在线观看av | 不卡电影免费在线播放一区 | 日韩欧美v | 五月婷婷免费 | 精品福利片 | 久久国产热视频 | 久久免费黄色大片 | 久久亚洲精品国产亚洲老地址 | 五月激情视频 | 99久久精品无码一区二区毛片 | 精品人妖videos欧美人妖 | 亚洲精品高清一区二区三区四区 | 91免费国产在线观看 | 日韩超碰 | 色久综合 | 99成人精品 | 精品国偷自产国产一区 | 亚洲高清在线视频 | 在线免费视 | 日日夜夜网站 | 中国一级片在线播放 | 91成人免费看片 | 欧美片一区二区三区 | 国产午夜小视频 | 美女网色| 少妇视频一区 | 欧美夫妻性生活电影 | 免费一级片在线观看 | 亚洲日韩中文字幕在线播放 | 亚州精品天堂中文字幕 | 超碰97人人爱 | 五月婷婷一区二区三区 | 国产视频一区在线免费观看 | 精品成人免费 | 国产99久久久国产精品成人免费 | 高清美女视频 | 亚洲japanese制服美女 | 日本午夜在线亚洲.国产 | 久久人人做 | 色干综合 | 99精品亚洲 | 色综合久久久久综合体桃花网 | 国产中文字幕在线视频 | 国产小视频在线 | 99国产精品免费网站 | 91在线操| 亚洲a网| 日韩色中色 | 黄视频网站大全 | 久久精品久久国产 | 激情文学综合丁香 | www.天天色.com | 中文字幕免费观看全部电影 | 国产高清绿奴videos | 国内成人av | 91亚洲国产成人久久精品网站 | 女人18精品一区二区三区 | 免费十分钟 | 国产精品www | 丁香电影小说免费视频观看 | 亚洲国产播放 | 欧美精品小视频 | 国产一级大片免费看 | 黄色亚洲大片免费在线观看 | 久久精品中文字幕一区二区三区 | 在线观看成人av | 成人av中文字幕在线观看 | 五月激情丁香婷婷 | 免费a级大片 | 人人超碰人人 | 色天天综合久久久久综合片 | 亚洲精品动漫久久久久 | 国产黄a三级三级三级三级三级 | 亚洲视频免费在线观看 | 午夜国产福利在线 | 亚洲黄在线观看 | 一级做a爱片性色毛片www | 欧美天天射 | 国内揄拍国产精品 | 99久久99久久精品国产片果冰 | 成人黄视频 | 日韩一区正在播放 | 福利二区视频 | 欧美性色黄大片在线观看 | 国产精品一区二区三区免费视频 | 日韩a欧美 | 亚洲成熟女人毛片在线 | 久草香蕉在线 | 天天插天天色 | 五月丁香| wwwww.国产| 中文字幕在线影院 | 99久久综合狠狠综合久久 | 久久精品中文视频 | 久久久久国产成人精品亚洲午夜 | 日日操日日插 | 欧美日韩精品免费观看视频 | 国产精品免费视频网站 | 欧美午夜久久久 | 男女男视频 | 精品人人人人 | 日韩av视屏在线观看 | av专区在线 | 日韩欧美一区视频 | 成人a视频 | 国产不卡精品 | 天天操天天射天天插 | 波多野结衣一区二区 | 亚洲精品网址在线观看 | 波多野结衣电影一区 | 99视频国产在线 | 欧美日韩国产精品一区二区三区 | 久久99久久99精品免费看小说 | 日韩网站一区二区 | 国产精品黄色 | 97色在线视频 | 国产精品字幕 | 国产一区二区在线观看免费 | 欧美精品一区二区在线观看 | 欧美另类交人妖 | 日韩大片免费观看 | av在线播放快速免费阴 | 日本精品一区二区三区在线播放视频 | 99视频免费播放 | 99热这里只有精品久久 | 999久久久欧美日韩黑人 | 久久久久久久久久久久亚洲 | 在线观看不卡视频 | 亚洲四虎影院 | 久久成熟 | 久久精品站 | 高清av在线免费观看 | 免费精品在线观看 | 超碰人在线| 青草视频网| a级国产乱理论片在线观看 特级毛片在线观看 | 天天色播| 狠狠网 | 久久99精品国产99久久 | 亚洲精品在线免费 | 久久久久久久久久久久亚洲 | 免费日韩一区二区 | 午夜国产影院 | 久久久99国产精品免费 | 久草在线视频精品 | 青青河边草免费直播 | 国产精品久久久久久吹潮天美传媒 | 国产视频一区精品 | 韩国av永久免费 | 久久久受www免费人成 | 欧美日韩电影在线播放 | 国产精品美女久久久久久 | 最近中文字幕免费视频 | 91网址在线 | www.久久精品视频 | 欧美一级片在线播放 | 香蕉在线影院 | 中文字幕资源网在线观看 | 国产精品18久久久久vr手机版特色 | 97超碰人人 | 国产一区二区中文字幕 | 欧美精品久久久久久久久免 | 五月综合网站 | 中文字幕在线字幕中文 | 911久久香蕉国产线看观看 | 狠狠综合网 | 一本一本久久aa综合精品 | 精品爱爱 | 久久久久久久久久久久99 | 国产亚洲欧美在线视频 | 在线国产中文字幕 | 亚洲动漫在线观看 | www91在线观看 | 97色狠狠| 午夜国产福利在线 | 亚洲丁香日韩 | 91成人欧美 | 亚洲h在线播放在线观看h | 国产一区 在线播放 | 欧美国产日韩一区二区 | 婷婷在线不卡 | 亚洲欧洲日韩在线观看 | 成人av在线观 | 91精品国产高清自在线观看 | 999视频在线播放 | 国产一级电影 | 色五月情| 日韩久久久久久久久 | 美女黄久久 | 久精品视频免费观看2 | 亚洲精品国产自产拍在线观看 | 精品人妖videos欧美人妖 | 国产美女精品视频 | 欧美91av| 一区二区精品久久 | 国产精品96久久久久久吹潮 | 婷婷六月色 | av黄色在线播放 | 亚洲视频一区二区三区在线观看 | 91爱爱电影 | 久久人视频 | 99精品国产高清在线观看 | 一本大道久久精品懂色aⅴ 五月婷社区 | 成人免费亚洲 | 国产亚洲成人网 | 日韩免费在线观看 | 色婷婷综合久久久中文字幕 | 丁香六月婷婷开心 | 91在线你懂的 | 最新午夜电影 | 亚洲免费在线看 | 午夜影视剧场 | 欧美激情精品久久久久久免费印度 | 精品久久久久久国产偷窥 | 精品美女久久久久 | 久久精品国产成人精品 | 黄色软件在线看 | 日韩欧美高清一区二区三区 | 亚州精品国产 | 久久免费电影网 | 就色干综合 | 成人免费看片网址 | 国产中文字幕91 | 在线观看亚洲精品 | 岛国大片免费视频 | 亚洲成人免费在线 | 日批视频在线 | 99热这里有精品 | 99久久99久久精品国产片果冰 | 8x8x在线观看视频 | 国产在线自| 久久久99久久 | 五月天激情视频 | 91丨九色丨国产在线 | 国产黄色美女 | 在线观看成人国产 | 丁香婷婷深情五月亚洲 | 91福利视频免费观看 | 欧美视频二区 | 日本高清xxxx | 香蕉视频在线免费 | 日韩美一区二区三区 | 久久精品国产精品亚洲 | 久久影院午夜论 | a资源在线| 久久成人综合视频 | 亚洲国产午夜精品 | 欧美一级性视频 | 日韩av电影手机在线观看 | 国产99亚洲 | 99爱精品视频 | 久久久午夜视频 | 91中文字幕网 | 久久久久久久久久久久久9999 | 五月天网站在线 | 九九九热精品免费视频观看网站 | 中文字幕91视频 | 国产91全国探花系列在线播放 | 久久久久久国产一区二区三区 | 99夜色| 中文字幕日本特黄aa毛片 | 99热9| 精品国产免费av | 丁香婷婷电影 | 手机在线欧美 | 国产成人免费高清 | 中文字幕在线观看国产 | 国产热re99久久6国产精品 | 在线探花| 精品福利网| 免费黄av| 国产精品欧美日韩在线观看 | 2019中文 | www..com毛片| 久久精品视频18 | 婷婷色五| 久久久九九 | 亚洲天堂色婷婷 | 狠狠的日 | 天天在线免费视频 | 亚洲激情视频在线 | 欧美另类交人妖 | 在线91色| 中文字幕日韩有码 | 日韩欧美在线中文字幕 | 黄色片网站av | 精品视频久久 | 岛国av在线不卡 | 三级午夜片 | 福利网址在线观看 | 激情偷乱人伦小说视频在线观看 | 女人18精品一区二区三区 | 亚洲国产精品久久久久久 | 色狠狠狠| 国产精品va最新国产精品视频 | 日韩欧美黄色网址 | 久久久久久美女 | 日日天天av| 国外调教视频网站 | .国产精品成人自产拍在线观看6 | 亚洲免费av片 | 高清视频一区二区三区 | 国产福利一区二区三区视频 | 日批网站在线观看 | 精品欧美小视频在线观看 | 国内精品在线观看视频 | 亚洲精品视频免费看 | 看片在线亚洲 | 日日操日日 | 免费观看国产成人 | 日韩午夜在线观看 | 国产久视频| 一区二精品| 亚洲精品视频第一页 | av一级在线观看 | 国产成人精品999在线观看 | 天天玩天天干 | av不卡在线看 | 97理论电影 | 亚洲视频高清 | 在线小视频 | 国产不卡在线观看视频 | 九九久久电影 | 在线视频 一区二区 | 国产涩涩网站 | 999热线在线观看 | 欧美日韩xxx | 91成人精品 | 麻豆影视在线免费观看 | 99在线视频精品 | 成人影视免费 | 99精品区 | 亚洲天堂网视频 | 国产亚洲精品女人久久久久久 | 9免费视频| 久久成人一区二区 | 日韩v在线| 色综合咪咪久久网 | 欧美日韩国产精品一区二区 | 蜜桃传媒一区二区 | 热九九精品 | 国产在线观看免费观看 | 在线观看黄色小视频 | 麻豆免费在线视频 | 五月天婷婷在线播放 | 久久这里 | 久久久久久久99精品免费观看 | 91色国产| 婷婷干五月 | 成人av.com| 中文字幕国产精品 | 91看片淫黄大片在线播放 | 国产成人精品一区一区一区 | 日韩免费在线观看网站 | 婷婷激情网站 | 国产精品一区二区av日韩在线 | 97在线成人| 日本久久综合网 | 亚洲黄色一级视频 | 天天综合成人 | 亚洲精品在线观看中文字幕 | 97国产精品 | 不卡av在线免费观看 | 99在线精品免费视频九九视 | 亚洲春色综合另类校园电影 | 日本韩国欧美在线观看 | 男女激情片在线观看 | 免费福利视频导航 | 亚洲日本欧美 | 免费看污片 | 欧美日韩性视频 | 五月天婷亚洲天综合网精品偷 | 精品国产一区二区三区久久久久久 | 日日夜夜人人天天 | 国产精品中文久久久久久久 | 91视频 - v11av | 久久国产免费看 | 久草在线免费新视频 | 91网页版在线观看 | 二区精品视频 | 97天堂网 | 97超碰在线播放 | 婷婷去俺也去六月色 | 99精品网站 | 国产一区二区在线视频观看 | 2019天天干天天色 | 美女视频黄频大全免费 | 午夜影院在线观看18 | 国产精品综合在线观看 | 免费久草视频 | 99久久久久免费精品国产 | 久久综合操 | japanesexxxhd奶水 91在线精品一区二区 | 欧美 日韩 国产 成人 在线 | 在线观看国产永久免费视频 | 久操视频在线播放 | 91久色蝌蚪| 亚洲精品综合欧美二区变态 | 日韩城人在线 | 久久久精品欧美一区二区免费 | 日本久久久久久科技有限公司 | 激情五月婷婷激情 | 国产视频精品视频 | 啪啪小视频网站 | 日韩亚洲欧美中文字幕 | 欧美一级日韩三级 | 欧美高清成人 | 一本到视频在线观看 | 久久综合婷婷国产二区高清 | 久久99精品国产麻豆宅宅 | 天天干 夜夜操 | 日韩精品免费在线观看视频 | 久草在线中文视频 | 永久免费在线 | 亚洲黄色大片 | 有码中文在线 | 久久久久国产精品一区二区 | 成人免费视频观看 | 久久国产精品一区二区三区 | 久久色亚洲 | 国产在线久草 | 久 久久影院 | 狠狠色免费 | 国产偷国产偷亚洲清高 | 91免费日韩 | 亚洲在线资源 | 久久不射电影院 | 精品视频免费在线 | 国产精品久久久久久久久久ktv | 久草在线费播放视频 | 91精品91| 丁香 久久 综合 | 国产原创av片 | 久久99影院 | 日韩电影在线视频 | 日韩大片在线免费观看 | 精品在线观 | 亚一亚二国产专区 | 黄色1级毛片| 欧美不卡视频在线 | 国产精品一区二 | 麻豆精品视频在线 | 成年人视频在线免费播放 | 亚洲人成人99网站 | 99精品视频一区二区 | 久久理论电影网 | 久草在线资源免费 | 51久久成人国产精品麻豆 | 91精品综合在线观看 | 日韩av影视在线观看 | av免费电影在线 | 在线观看麻豆av | 一级黄色电影网站 | 在线免费观看视频一区 | 久久久精品小视频 | 国产精品自产拍在线观看蜜 | 欧美视频在线观看免费网址 | 国产精品三级视频 | 一区二区激情视频 | 中文字幕国产精品 | 色香蕉在线| 成人四虎 | 免费美女av| 91免费看黄色 | 久久香蕉国产精品麻豆粉嫩av | 97精品超碰一区二区三区 | 欧美激情综合网 | 91看成人| 最新日本中文字幕 | 欧美日韩精品免费观看视频 | 97超碰人人澡人人爱 | 日韩精品视频免费在线观看 | 日本中文字幕在线视频 | 国产精品成人一区二区三区吃奶 | 久草在线视频中文 | 免费看的国产视频网站 | 久久综合亚洲鲁鲁五月久久 | 午夜99| 99国产精品久久久久久久久久 | 国产伦理精品一区二区 | 日韩高清一区 | 看av免费| 亚洲欧洲精品一区 | 久久精品在线 | 免费男女网站 | 五月综合色婷婷 | 日狠狠 | 亚洲精品欧美视频 | 国产精品美乳一区二区免费 | 91视视频在线直接观看在线看网页在线看 | www.97视频 | 成人精品影视 | zzijzzij亚洲日本少妇熟睡 | 亚洲黄色网络 | 国产精品xxxx18a99 | 精品福利视频在线观看 | www.狠狠操.com | 美女在线观看网站 | 亚洲综合网站在线观看 | 天天操天天干天天干 | 久久dvd | 五月天婷婷在线观看视频 | 99爱精品视频 | 美女视频黄的免费的 | 色噜噜在线观看 | av成人在线看 | 四虎永久精品在线 | 精品久久久久久久久亚洲 | 久久高清毛片 | 岛国av在线免费 | 中文字幕在线一区观看 | 久久在线 | 丁香六月久久综合狠狠色 | 婷婷激情av | 欧美午夜精品久久久久久孕妇 | 丁香婷婷久久 | 91视频91蝌蚪 | 97视频在线观看免费 | 91亚洲精品久久久蜜桃借种 | 黄色毛片视频 | 四虎影视精品成人 | 久久久久久影视 | 三上悠亚在线免费 | 亚洲国产av精品毛片鲁大师 | 福利视频 | 黄色av电影在线观看 | 视频二区 | 天天干天天做 | 99久久日韩精品免费热麻豆美女 | 国内99视频 | 国产成人亚洲精品自产在线 | 亚洲精品视频在线免费播放 | 国产麻豆剧传媒免费观看 | 在线97| 大片网站久久 | 亚洲另类视频在线观看 | 久久免费黄色网址 | 国产无遮挡又黄又爽在线观看 | 中文字幕av网站 | 国产精品久久久久一区二区三区 | a亚洲视频 | 日日操网站 | 天天激情综合 | 天天在线操 | 激情综合网在线观看 | 国产成人av网址 | 国产中文在线视频 | 久久影视中文字幕 | 黄色小说免费在线观看 | 国产人成一区二区三区影院 | 亚洲国产精久久久久久久 | 亚洲一区久久久 | 久久深夜福利免费观看 | 国产成人精品一区二区在线观看 | a精品视频| 日韩三级视频 | 草久久久| 久久久受www免费人成 | 97免费视频在线播放 | 亚洲九九精品 | 91在线看视频免费 | 免费黄色av电影 | 亚洲一级二级三级 | 欧美日韩精品在线观看视频 | 国产精品密入口果冻 | 国产一级黄 | 91精品视频在线免费观看 | 亚洲精品午夜久久久久久久 | 日日夜夜精品网站 | 在线看片日韩 | 日韩一级片网址 | 91亚·色| 蜜臀av.com| 久久怡红院 | 一区精品久久 | 精品久久久国产 | 亚洲日本在线一区 | 国产成视频在线观看 | 97超碰资源网 | 热久久视久久精品18亚洲精品 | 免费电影播放 | 日本中文字幕在线 | 日韩精品视频一二三 | 在线视频麻豆 | 亚洲国产日韩欧美 | 久久成人麻豆午夜电影 | 日日碰狠狠添天天爽超碰97久久 | 五月天亚洲激情 | 91禁看片 | 成人黄色影片在线 | 欧美成人xxxx | 天天操狠狠操 | 精品亚洲免费 | 免费观看www7722午夜电影 | 99热只有精品在线观看 | 国产 日韩 在线 亚洲 字幕 中文 | 69精品久久| 韩国三级在线一区 | 99视频这里有精品 | 黄色三级免费 | 国产成人一区二区三区久久精品 | 国产亚洲精品久久久久久电影 | 永久av免费在线观看 | 麻花传媒mv免费观看 | 久草在线在线视频 | 婷婷在线网站 | 久久久精品成人 | av中文字幕网址 | 成人午夜在线电影 | 日本精a在线观看 | 久久久久久黄 | 国产精品18久久久久久首页狼 | 麻豆系列在线观看 | 亚洲精品欧美精品 | 免费观看成人 | 亚洲欧美国产精品va在线观看 | 最新婷婷色| 国产精品69av| 一区二区av | 亚洲婷婷综合色高清在线 | 日本成址在线观看 | 丝袜少妇在线 | 最新中文字幕在线播放 | 久久九九久久精品 | 精品久久久影院 | www.伊人网 | 国产精品美女久久久久久久久久久 | 亚洲男男gaygay无套同网址 | 五月婷婷一级片 | 久久亚洲免费视频 | 69国产盗摄一区二区三区五区 | 国产精品久久久久久久久久ktv | 九九激情视频 | 美女久久久久久久久久 | 久久96国产精品久久99漫画 | 国产精品福利在线 | 国产一区二区免费 | 99中文字幕视频 | 日本精品视频在线观看 | 麻豆免费看片 | 国产精品第一页在线观看 | 亚洲在线免费视频 | 黄色aa久久 | 日韩精品一区二区三区三炮视频 | 手机看片国产日韩 | 狠狠色狠狠色综合日日92 | 日本中文字幕系列 | 看毛片的网址 | 精品视频999 | 欧美 亚洲 另类 激情 另类 | 久久免费毛片 | 视频一区二区免费 | 日韩在线观看视频一区二区三区 | 亚洲精品女人久久久 | 亚洲美女免费视频 | 一级黄色毛片 | 日韩电影在线视频 | 最新超碰| 91在线视频免费91 | 国产免费国产 | av女优中文字幕在线观看 | 精品在线亚洲视频 | 国产精品久久久久久久免费大片 | 视频直播国产精品 | 91精品国产乱码久久 | 手机av永久免费 | 久久综合久色欧美综合狠狠 | 婷婷激情久久 | 色多多视频在线观看 | 色婷婷免费视频 | 一级黄色免费网站 | 毛片无卡免费无播放器 | 在线看中文字幕 | 国产夫妻性生活自拍 | 狠狠的干狠狠的操 | 久久久久亚洲最大xxxx | 久久久国产精品久久久 | 99日精品 | 免费在线观看av网站 | 成人app在线播放 | 久久久久久久久久国产精品 | 国产精品99久久久久久人免费 | 久久精品国产久精国产 | 干天天 | 日韩视频一区二区在线 | 黄色成人在线 | 91精品人成在线观看 | 午夜精品久久久久久久久久久久久久 | www.久久免费 | 精品黄色片 | 国产成人一区二区三区在线观看 | 国产在线观看中文字幕 | 成人动漫精品一区二区 | 亚洲视频免费 | 日本精品久久久久中文字幕5 | 天天草网站 | 91色九色 | 天天射天天添 | 色婷婷久久 | 涩涩网站在线播放 | 日韩在线视频一区 | 一区二区三区在线看 | 国产精品视频久久 | 黄色av影视 | 国产精品va最新国产精品视频 | 婷婷播播网 | 精品视频久久久 | av 一区 二区 久久 | 精品一区二区影视 | 黄色av影视 | 久久久久久国产精品999 | 一色av | 超碰av在线免费观看 | 国产精品视频观看 | 一区二区不卡视频在线观看 | 99re久久资源最新地址 | 日韩专区在线 | 免费看成人 | 99精品国产一区二区三区不卡 | 国产精品一区二区在线观看免费 | 久久无码精品一区二区三区 | 久草亚洲视频 | 精品久久久久久久久久久院品网 | 少妇精品久久久一区二区免费 | 欧美色婷 | 最新av电影网站 | 国产美女精品视频免费观看 | 久久久在线 | 国产视频一区在线免费观看 | 久久免费精品 | 中文字幕有码在线播放 | 在线免费看片 | 日操操 | 国产视频一区在线播放 | 美女精品在线 | 亚洲国产精品传媒在线观看 | av中文字幕第一页 | 麻豆视频在线观看 | www欧美xxxx | 婷婷国产精品 | 久久人人爽视频 | 国产精品乱码久久久久久1区2区 | 精品在线视频一区 | 久久国产精品一区二区三区四区 | 天天色天天草天天射 | 亚洲视频axxx| 亚洲精品网站 | 成人91免费视频 | 色综合夜色一区 | 夜夜夜影院 | 国产免费又粗又猛又爽 | 久久九九精品 | 日日精品| 亚洲精品视频大全 | 97在线看| 丰满少妇对白在线偷拍 | 色婷婷综合久久久 | 久久午夜影视 | 青青射 | 成人国产在线 | 69国产在线观看 | 国产精品99免视看9 国产精品毛片一区视频 | 日韩成人免费在线观看 | 亚洲精品中文字幕视频 | 国产亚洲观看 | 成人中文字幕在线观看 | 香蕉网在线 | 国产成年免费视频 | 国产色黄网站 | 日日夜夜噜| 不卡av在线 | 91探花在线| 精品字幕| h网站免费在线观看 | 探花视频免费观看高清视频 | 国产亚洲视频中文字幕视频 | 在线观看视频国产一区 | 一区二区三区四区不卡 | 超碰在线中文字幕 | 久久综合久久综合九色 | 免费人成网ww44kk44 | 国产精品久久免费看 | 91在线精品一区二区 | 在线观看亚洲视频 | 91亚洲网| 久久精品久久精品久久 | 成人黄色片免费看 | 91插插插免费视频 | 中字幕视频在线永久在线观看免费 | 精品在线视频播放 | 国产精品美女久久久久久久久 | 久久精品4 | 成人毛片久久 | 久久久久亚洲精品男人的天堂 | 成年人免费在线播放 | 欧美日韩视频免费 | 精品网站999www | 日韩精品极品视频 | 狠狠的日| 麻豆传媒电影在线观看 | 日韩午夜电影院 | 婷婷丁香社区 | 国产成人福利在线观看 | 成年人电影免费在线观看 | 婷婷五情天综123 | 在线观看视频一区二区 |