• 找回删除的数据


    --Function
    create FUNCTION dbo.f_splitBinary(@s varbinary(max))
    returns @t table(id int identity(1,1),Value binary(1))
    as
    BEGIN
    declare @i int,
    @im int;
    select @i=1,@im=datalength(@s);
    while @i<=@im
    begin
    insert into @t select substring(@s,@i,1);
    set @i=@i+1;
    end
    return;
    END
    GO

    create FUNCTION dbo.f_reverseBinary(@s varbinary(128))
    returns varbinary(128)
    as
    BEGIN

    declare @r varbinary(128);
    set @r=0x;
    select @r=@r+Value from dbo.f_splitBinary(@s) a order by id desc
    return @r;

    END
    GO


    create PROCEDURE [dbo].[p_printSql](@sql varchar(max),@flag char(1)=',',@intal varchar(5)='' )
    as
    BEGIN

    declare @l_sql varchar(max),
    @i int,
    @l int;
    set @l=len(@sql);
    while @l>8000-5
    begin
    select @i=8000-5-charindex(
    @flag,
    reverse(left(@sql,8000-5))
    ),
    @l_sql=left(@sql,@i),
    @sql=right(@sql,@l-@i),
    @l=@l-@i;
    print @intal+@l_sql;
    end
    print @intal+@sql

    END
    GO

    alter proc [dbo].[p_getLog](@TableName sysname,@c int=10)
    AS
    BEGIN
    set nocount on
    declare @s varbinary(max),
    @str varchar(max),
    @lb int,@le int,
    @operation varchar(128)
    declare @i int,@lib int,
    @lie int,
    @ib int,
    @ie int,
    @lenVar int,
    @columnname sysname,
    @length int,
    @columntype varchar(32)
    declare @TUVLength int,
    @vc int,
    @tc int

    select b.name,b.length,c.name typename,b.colid,
    case
    when c.name not like '%var%'
    and c.name not in ('xml','text','image')
    then 1 else 2 end p,row_number()
    over(
    partition by
    case
    when c.name not like '%var%'
    and c.name not in ('xml','text','image')
    then 1 else 2
    end
    order by colid
    ) pid
    into #t
    from sysobjects a
    inner join syscolumns b on a.id=b.id
    inner join systypes c on b.xtype=c.xusertype
    where a.name=@TableName order by b.colid

    SELECT top(@c) Operation,[RowLog Contents 0],id=identity(int,1,1)
    into #t1
    from::fn_dblog (null, null)
    where AllocUnitName like 'dbo.'+@TableName+'%'
    and Operation in('LOP_DELETE_ROWS')
    --AND allocunitname like'%PK_TEMPLOYEESTATION%'
    order by [Current LSN] DESC --'LOP_INSERT_ROWS',

    select @TUVLength=sum(length) from #t where p=1
    select @tc=count(*) from #t

    select @lb=min(id),@le=max(id) from #t1
    while @lb<=@le
    begin
    select @operation=Operation,@s=[RowLog Contents 0] from #t1 where id=@lb
    select @i=5,@str='',@vc=0
    select @lib=min(pid),@lie=max(pid) from #t where p=1
    while @lib<=@lie
    begin
    select @columnname=name,@length=length,@columntype=typename from #t where p=1 and pid=@lib
    -- print rtrim(@i)+'->'+rtrim(@length)
    if dbo.f_reverseBinary(substring(@s,4+@TUVLength+2+1,1+((@tc-1)/8))) & power(2,@vc) <> 0
    select @str=@str+@columnname+'=NULL,',@i=@i+@length
    else if @columntype='char'
    select @str=@str+@columnname+'='+convert(varchar(256),substring(@s,@i,@length))+',',@i=@i+@length
    else if @columntype='nchar'
    select @str=@str+@columnname+'='+convert(nvarchar(256),substring(@s,@i,@length))+',',@i=@i+@length
    else if @columntype='datetime'
    BEGIN
    --PRINT '@i= ' + CONVERT(NVARCHAR,@i)
    --PRINT 'pct: '+convert(nvarchar,convert(int,dbo.f_reverseBinary(substring(@s,@i+4,4))));
    select @str=@str+@columnname+'='
    +convert(VARCHAR
    ,dateadd(second,
    convert(int,dbo.f_reverseBinary(substring(@s,@i,4)))/300
    ,dateadd(day
    ,convert(int,dbo.f_reverseBinary(substring(@s,@i+4,4)))
    ,'1900-01-01'))
    ,120)
    +','
    ,@i=@i+8;
    END
    else if @columntype='smalldatetime'
    select @str=@str+@columnname+'='+convert(varchar,dateadd(minute,convert(int,dbo.f_reverseBinary(substring(@s,@i,2)))/60
    ,dateadd(day,convert(int,dbo.f_reverseBinary(substring(@s,@i+2,2))),'1900-01-01')),120)+',',@i=@i+4
    else if @columntype='int'
    select @str=@str+@columnname+'='+rtrim(convert(int,dbo.f_reverseBinary(substring(@s,@i,4))))+',',@i=@i+4
    -- else if @columntype='bit'
    -- begin
    -- select @str=@str+@columnname+'='+rtrim(convert(bit,substring(@s,@i,1)))+',',@i=@i+1
    -- end
    set @vc=@vc+1;
    set @lib=@lib+1;
    end
    set @i=@i+3+((@tc-1)/8);
    set @lenVar=convert(int,dbo.f_reverseBinary(substring(@s,@i,2)));
    set @i=@i+2;
    set @ib=@i + @lenVar*2;
    set @ie=convert(int,dbo.f_reverseBinary(substring(@s,@i,2)));
    select @lib=min(pid),@lie=max(pid) from #t where p=2;
    while @lib<=@lie
    begin
    -- print rtrim(@ib)+'->'+rtrim(@ie)
    select @columnname=name,@length=length,@columntype=typename from #t where p=2 and pid=@lib;
    if dbo.f_reverseBinary(substring(@s,4+@TUVLength+2+1,1+((@tc-1)/8))) & power(2,@vc) <> 0
    begin
    select @str=@str+@columnname+'=NULL,';
    select @ib=@ie+1,@i=@i+2;
    set @ie=convert(int,dbo.f_reverseBinary(substring(@s,@i,2)));
    end
    else if @columntype='varchar'
    begin
    select @str=@str+@columnname+'='+convert(varchar(256),substring(@s,@ib,@ie-@ib+1))+',';
    select @ib=@ie+1,@i=@i+2;
    set @ie=convert(int,dbo.f_reverseBinary(substring(@s,@i,2)));
    end
    else if @columntype='nvarchar'
    begin
    select @str=@str+@columnname+'='+convert(nvarchar(256),substring(@s,@ib,@ie-@ib+1))+',';
    select @ib=@ie+1,@i=@i+2;
    set @ie=convert(int,dbo.f_reverseBinary(substring(@s,@i,2)));
    end
    set @vc=@vc+1;
    set @lib=@lib+1;
    end
    set @str=left(@str,len(@str)-1);
    print @operation+':'+@str;
    set @lb=@lb+1;
    end

    drop table #t,#t1
    END
    GO

  • 相关阅读:
    AIMS 2013中的性能报告工具不能运行的解决办法
    读懂AIMS 2013中的性能分析报告
    在线研讨会网络视频讲座 方案设计利器Autodesk Infrastructure Modeler 2013
    Using New Profiling API to Analyze Performance of AIMS 2013
    Map 3D 2013 新功能和新API WebCast视频下载
    为Autodesk Infrastructure Map Server(AIMS) Mobile Viewer创建自定义控件
    ADN新开了云计算Cloud和移动计算Mobile相关技术的博客
    JavaScript修改css样式style
    文本编辑神器awk
    jquery 开发总结1
  • 原文地址:https://www.cnblogs.com/kuailewangzi1212/p/2876404.html
Copyright © 2020-2023  润新知