1.第一种情况是 需要将指定的 注入字符串全部替换掉(仅替换注入的字符串为空)
复制代码 代码如下:
declare @delStr nvarchar(500)
set @delStr='<script src=https://www.jb51.net/js/common.js></script>' --这里被注入的字段串
/****************************************/
/**********以下为操作实体************/
set nocount on
declare @tableName nvarchar(100),@columnName nvarchar(100),@tbID int,@iRow int,@iResult int
declare @sql nvarchar(2000)
set @iResult=0
declare cur cursor for
select name,id from sysobjects where xtype='U'
open cur
fetch next from cur into @tableName,@tbID
while @@fetch_status=0
begin
declare cur1 cursor for
select name from syscolumns where xtype in (231,167,239,175, 35, 99) and id=@tbID
open cur1
fetch next from cur1 into @columnName
while @@fetch_status=0
begin
set @sql='update [' + @tableName + '] set ['+ @columnName +']= SUBSTRING([' + @columnName + '],' + '1, PATINDEX( ''%' + @delStr + '%'', [' + @columnName + '])-1) + ' + 'SUBSTRING([' + @columnName + '], PATINDEX( ''%' + @delStr + '%'', [' + @columnName + ']) + ' + 'len(''' + @delStr + ''') , datalength([' + @columnName + '])) where ['+@columnName+'] like ''%'+@delStr+'%'''
exec sp_executesql @sql
set @iRow=@@rowcount
set @iResult=@iResult+@iRow
if @iRow>0
begin
print '表:'+@tableName+',列:'+@columnName+'被更新'+convert(varchar(10),@iRow)+'条记录;'
end
fetch next from cur1 into @columnName

end
close cur1
deallocate cur1
fetch next from cur into @tableName,@tbID
end
print '数据库教程共有'+convert(varchar(10),@iResult)+'条记录被更新!!!'
close cur
deallocate cur
set nocount off

2.第二种是 需要将注入到表中起始位置到最后都删掉。(此种方法直接找到注入的起始位置,后面的全部删掉)
复制代码 代码如下:
--恢复被注入数据库
--2013-09-26
declare @delStr nvarchar(500)
set @delStr='</title><style>.' --被注入的字段串的开始采样,从此位置后面的数据都为注入数据

/**********以下为操作实体************/
set nocount on
declare @tableName nvarchar(100),@columnName nvarchar(100),@tbID int,@iRow int,@iResult int
declare @sql nvarchar(2000)
set @iResult=0
declare cur cursor for
select name,id from sysobjects where xtype='U'
open cur
fetch next from cur into @tableName,@tbID
while @@fetch_status=0
begin
declare cur1 cursor for
select name from syscolumns where xtype in (231,167,239,175, 35, 99) and id=@tbID
open cur1
fetch next from cur1 into @columnName
while @@fetch_status=0
begin
set @sql='update [' + @tableName + '] set ['+ @columnName +']=
SUBSTRING([' + @columnName + '],1, PATINDEX( ''%' + @delStr + '%'', [' + @columnName + '])-1) where ['+@columnName+'] like ''%'+@delStr+'%'''
exec sp_executesql @sql
set @iRow=@@rowcount
set @iResult=@iResult+@iRow
if @iRow>0
begin
print '表:'+@tableName+',列:'+@columnName+'被更新'+convert(varchar(10),@iRow)+'条记录;'
end
fetch next from cur1 into @columnName

end
close cur1
deallocate cur1
fetch next from cur into @tableName,@tbID
end
print '数据库教程共有'+convert(varchar(10),@iResult)+'条记录被更新!!!'
close cur
deallocate cur
set nocount off

更多相关文章

  1. 《Android和PHP最佳实践》官方站
  2. 浅谈Java中Collections.sort对List排序的两种方法
  3. android用户界面之按钮(Button)教程实例汇
  4. TabHost与RadioGroup结合完成的菜单【带效果图】5个Activity
  5. 创建android逐帧动画的两种方式
  6. Android(安卓)UI开发第十七篇——Android(安卓)Fragment实例(Lis
  7. Android——Activity四种启动模式
  8. TabHost两种实现方式
  9. Android布局(序章)

随机推荐

  1. android studio 3.0 build错误
  2. 第十二节(android常用控件三)
  3. android添加reboot选项
  4. androidの获取android手机信息
  5. Android 修改默认USB模式
  6. android adb端口被占用解决方案
  7. Android(安卓)Studio:Unable to instanti
  8. Android(安卓)锁屏(设备管理)
  9. Android最简单的使用数组的适配器Adapter
  10. Android数据库组件Room