日期:2014-05-18  浏览次数:20599 次

将截断字符串或二进制数据
居然在 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 字符长度限制