从某些表
问题描述:
我有一个用于填充网站从某些表
网站受到攻击,可能使用一些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 '%<%'
它在nvarchar
和char
列工作的伟大,但它不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)
栏中移除这个东西?
答
你应该减去至LEN(MyField)
的'<'
位置在你的字符串:
UPDATE MyTable
SET MyField = REPLACE (MyField,
SUBSTRING(MyField, CHARINDEX('<', MyField), LEN(MyField)-CHARINDEX('<',MyField)-1), '')
WHERE MyField LIKE '%<%'
我也建议你搜索'<div>'
子,以避免与“<”启动,但不是垃圾邮件丢失数据。
实际上,字符串的结尾并不重要,它可以是任何高达8000个字符的字符,没有问题... 另外,我相信在该字段中没有其他“ Antonio
它正常工作nvarchar领域....但在nvarchar(最大)给出错误... – Antonio
你应该尝试选择Len(...子字符串内的替换函数... ... )并检查Len是否始终 kiks73