2015-09-26 92 views
0

我有一個用於填充網站從某些表

網站受到攻擊,可能使用一些SQL注入技術和多列在此表(文字列)SQL Server表中刪除垃圾郵件SQL注入有一些HTML,通常就像<div>some stuff and some links</div>

我只是想用第一<div>後刪除一切:

UPDATE MyTable 
SET MyField = REPLACE (MyField, 
         SUBSTRING(MyField, CHARINDEX('<', MyField), LEN(MyField)), '') 
WHERE MyField LIKE '%<%' 

它在nvarcharchar列工作的偉大,但它不nvarchar(max)列工作。我得到這個錯誤:

Msg 8152, Level 16, State 10, Row 1
String or binary data would be truncated.

Msg 3621, Level 0, State 0, Row 1
The statement has been terminated.

我應該怎麼做才能從nvarchar(max)欄中移除這個東西?

回答

1

你應該減去至LEN(MyField)'<'位置在你的字符串:

UPDATE MyTable 
SET MyField = REPLACE (MyField, 
         SUBSTRING(MyField, CHARINDEX('<', MyField), LEN(MyField)-CHARINDEX('<',MyField)-1), '') 
WHERE MyField LIKE '%<%' 

我也建議你搜索'<div>'子,以避免與「<」啓動,但不是垃圾郵件丟失數據。

+0

實際上,字符串的結尾並不重要,它可以是任何高達8000個字符的字符,沒有問題... 另外,我相信在該字段中沒有其他「<」字符,大多數是城市,地區,國名... – Antonio

+0

它正常工作nvarchar領域....但在nvarchar(最大)給出錯誤... – Antonio

+0

你應該嘗試選擇Len(...子字符串內的替換函數... ... )並檢查Len是否始終<最大值 – kiks73