我一直在存储过程中使用CHARINDEX
检查NVARCHAR(MAX)
类型的变量,但今天我发现CHARINDEX
有8,000字节的限制!
我发现这篇文章SQL CHARINDEX() Has Data Size Limitations。
所以我将CHARINDEX
替换为PATINDEX
,但我不知道PATINDEX
和CHARINDEX
之间的效果。
答案 0 :(得分:2)
CHARINDEX的限制为8000。不是你要搜索的字符串。
除非您想要查找字符串>该文章可能是错误的。 8000/4000长度。但是,它也使用不推荐使用的text数据类型。这是2007年的日期,所以它使用的是SQL Server 2005或2000,但是SQL Server 2005 BOL根本没有提到8000,这不是我尝试过的。
从SQL Server 2008 BOL:
CHARINDEX(expression1,expression2 [ ,start_location])
expression1是一个字符表达式 包含要找到的序列。 expression1限制为8000 字符。
expression2是要搜索的字符表达式。
注意:PATINDEX未提及SQL 2008或2005的8000限制。
最后,我使用CHARINDEX,因为如果你不需要模式匹配和它支持长字符串
,我认为直接搜索更直观答案 1 :(得分:1)
如果数据类型为text或ntext,则CHARIndex对您要搜索的字符串具有8000字节(非字符)限制。如果数据类型为varchar(max)或nvarchar(max),则8000字节限制无效;它搜索整个字符串。 (我只是在这一点。)我只是使用CAST解决了这个问题:CHARINDEX(searchterm, CAST(columnname as nvarchar(max))