2015-09-26 27 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