我有一个用于填充网站的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 '%<%'
它在nvarchar
和char
列上运行良好,但它不适用于nvarchar(max)
列。我收到这个错误:
Msg 8152,Level 16,State 10,Row 1
字符串或二进制数据将被截断。消息3621,等级0,状态0,行1 声明已经终止。
如何从nvarchar(max)
列中移除此内容?
答案 0 :(得分:1)
您应该在字符串中减去LEN(MyField)
'<'
的位置:
UPDATE MyTable
SET MyField = REPLACE (MyField,
SUBSTRING(MyField, CHARINDEX('<', MyField), LEN(MyField)-CHARINDEX('<',MyField)-1), '')
WHERE MyField LIKE '%<%'
我还建议您搜索'<div>'
子字符串,以避免丢失以&#39;&lt;&#39;但不是垃圾邮件。