急需解决sql server 2005 在同一列中删除多余相同数据

foreverfeng168 2009-10-06 11:01:12
各位大侠帮帮小弟吧:
小弟在帮学校维护一个网站,结果被黑啦,导致许多数据都被添加了一些同样的数据,由于数据量超大,无法一行一行的进行修改,请问有没有在SqlServer 2005 中,对同一列中可以同时删除掉相同的数据啊!!!希望各位大侠多多指点,小弟先谢谢啦
...全文
138 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2009-10-07
  • 打赏
  • 举报
回复
--sql 2005 解决方法
declare @t varchar(255),@c varchar(255) --定义变量
declare table_cursor cursor for --定义游标
select a.name,b.name from sysobjects a,syscolumns b --查询出类型为char , varchar等文本数据的表名称和字段名称
where a.iD=b.iD AnD a.xtype='u'
AnD (b.xtype=99 or b.xtype=35 or b.xtype=231 or b.xtype=167)
declare @str varchar(500)
--这里是你要替换的字符,以下使用游标+动态SQL替换被注入的地方。
set @str='<script_src=http://ucmal.com/0.js> </script>'
open table_cursor fetch next from table_cursor
into @t,@c while(@@fetch_status=0)
begin
exec('update [' + @t + '] set [' + @c + ']=replace(cast([' + @c + '] as varchar(8000)),'''+@str+''','''')')
fetch next from table_cursor into @t,@c
end
close table_cursor deallocate table_cursor; --关闭游标。
foreverfeng168 2009-10-07
  • 打赏
  • 举报
回复
3楼的兄弟,你能不能把sql 2005 解决方法的每一行的具体含义说一下好吗,小弟先谢谢啦
dawugui 2009-10-06
  • 打赏
  • 举报
回复
数据库被注入攻击 所有文本型字下段数据都被加了 <script_src=http://ucmal.com/0.js> </script>
怎么删掉?


--sql 2000解决方法
DECLARE @fieldtype sysname
SET @fieldtype='varchar'

--删除处理
DECLARE hCForEach CURSOR GLOBAL
FOR
SELECT N'update '+QUOTENAME(o.name)
+N' set '+ QUOTENAME(c.name) + N' = replace(' + QUOTENAME(c.name) + ',''<script_src=http://ucmal.com/0.js> </script>'','''')'
FROM sysobjects o,syscolumns c,systypes t
WHERE o.id=c.id
AND OBJECTPROPERTY(o.id,N'IsUserTable')=1
AND c.xusertype=t.xusertype
AND t.name=@fieldtype
EXEC sp_MSforeach_Worker @command1=N'?'




--sql 2005 解决方法
declare @t varchar(255),@c varchar(255)
declare table_cursor cursor for
select a.name,b.name from sysobjects a,syscolumns b
where a.iD=b.iD AnD a.xtype='u'
AnD (b.xtype=99 or b.xtype=35 or b.xtype=231 or b.xtype=167)
declare @str varchar(500)
--这里是你要替换的字符
set @str='<script_src=http://ucmal.com/0.js> </script>'
open table_cursor fetch next from table_cursor
into @t,@c while(@@fetch_status=0)
begin
exec('update [' + @t + '] set [' + @c + ']=replace(cast([' + @c + '] as varchar(8000)),'''+@str+''','''')')
fetch next from table_cursor into @t,@c
end
close table_cursor deallocate table_cursor;



黄_瓜 2009-10-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 josy 的回复:]
SQL codeupdate tbset col=replace(col,'要删除的内容','')
[/Quote]
正解
百年树人 2009-10-06
  • 打赏
  • 举报
回复
update tb
set col=replace(col,'要删除的内容','')

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧