我一直在存储过程中使用 CHARINDEX
来检查 NVARCHAR(MAX)
类型的变量,但今天我发现 CHARINDEX
有 8,000 字节的限制!
我找到这篇文章SQL CHARINDEX() Has Data Size Limitations .
所以我用PATINDEX
替换了CHARINDEX
,但是我不知道PATINDEX
和CHARINDEX
之间的性能。
最佳答案
CHARINDEX您要查找的字符串的限制为 8000。不适用于您正在搜索的字符串。
那篇文章可能是错误的,除非您想查找长度 > 8000/4000 的字符串。但是,它还使用已弃用的文本数据类型。它的日期是 2007 年,所以他使用的是 SQL Server 2005 或 2000,但 SQL Server 2005 BOL 根本没有提到 8000,我也没有尝试过。
来自 SQL Server 2008 BOL:
CHARINDEX ( expression1 ,expression2 [ , start_location ] )
expression1 Is a character expression that contains the sequence to be found. expression1 is limited to 8000 characters.
expression2 Is a character expression to be searched.
注意:PATINDEX 没有提到 SQL 2008 或 2005 的 8000 限制。
最后,我会使用 CHARINDEX,因为我认为如果您不需要模式匹配,它对于直接搜索会更直观并且它支持长字符串
关于tsql - PATINDEX 和 CHARINDEX 的性能如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1372583/