1,如果你的數據表很少的話,那麼寫幾條簡單的sql就搞定了
對于表中的nvchar類型的字段︰
| 以下為引用的內容︰ update news set title=replace(title,'【惡意代碼】','') |
對于表中的text類型的字段︰
| 以下為引用的內容︰ update news set content=Replace(Cast(content as varchar(8000)),'【惡意代碼】','') |
2,如果你是sql2000的話,可以用下面這個。
| 以下為引用的內容︰ 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) + ',''【惡意代碼】'','''')' 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'?' |
(這個是我網上搜索的,據說sql2000下可以,但我沒試過,在sql2005下無法執行。)
3,sql2005下我選擇的方法是先生成清理代碼的語句,然後把運行結果復制到查詢分析器里執行之,當然在sql2000下一樣可以用。
| 以下為引用的內容︰ select 'update ['+s.name + '] set ['+c.name+']=' +'replace(['+c.name+'],''【惡意代碼】'','''')' from sysobjects s,syscolumns c,systypes t where s.type='u' and s.id=c.id AND OBJECTPROPERTY(s.id,N'IsUserTable')=1 AND c.xusertype=t.xusertype AND t.name IN('varchar','nvarchar','char','nchar') union select 'update ['+s.name + '] set ['+c.name+']=' +'replace(Cast(['+c.name+'] as varchar(8000)),''【惡意代碼】'','''')' from sysobjects s,syscolumns c,systypes t where s.type='u' and s.id=c.id AND OBJECTPROPERTY(s.id,N'IsUserTable')=1 AND c.xusertype=t.xusertype AND t.name IN('text','ntext') |
ps︰以上是buzhizhe在處理問題時候整理的,方法1、2是網上搜索的,對于我的sql2005無用,因此寫了方法3,以便幫助不懂安全的菜鳥臨時解決問題。
