将截断字符串或二进制数据
居然在 like 时会提示这个错误,网上搜索遍了也不知道是何原因。
先看代码,我最终在条件语句中 like 一个长字符串。
SQL code
DECLARE @pattern VARCHAR(max)--定义个字符串变量
SELECT @pattern=REPLICATE(CONVERT(VARCHAR(max),'.'),20000)--赋值一个长度为2万的字符串
SELECT LEN(@pattern),@pattern--输出,确实是2万个字符
SELECT 1 WHERE @pattern LIKE REPLICATE(CONVERT(VARCHAR(max),'.'),20000)--出错
最终会报错
消息 8152,级别 16,状态 10,第 7 行
将截断字符串或二进制数据。
如果最后用等于就正常
SQL code
SELECT 1 WHERE @pattern = REPLICATE(CONVERT(VARCHAR(max),'.'),20000)-- =正常,like出错
难不成 like 有长度限制?可是我搜遍了也没这个说法啊。
哪位大侠碰到过,赐教。谢谢!
------解决方案--------------------
match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]
参数
--------------------------------------------
match_expression
任何有效的字符数据类型的表达式。
pattern
要在 match_expression 中搜索并且可以包括下列有效通配符的特定字符串。 pattern 的最大长度可达 8,000 字节。
最大长度8000,所以要切断。
------解决方案--------------------楼上正解,
参考 http://msdn.microsoft.com/zh-cn/library/ms179859(v=sql.105).aspx
------解决方案--------------------恩, pattern 的最大长度不能超过 8,000 字节
------解决方案--------------------8000字节。非要比较的话 应该可以用CHECKSUM
------解决方案--------------------like 和 charindex 都有这个最大长度8000的限制。
------解决方案--------------------like 有 8000 字符长度限制