在存儲過程中,我一直使用CHARINDEX
來檢查NVARCHAR(MAX)
類型的變量,但是今天我發現CHARINDEX
有8,000字節的限制!PATINDEX和CHARINDEX之間的性能如何?
我覺得這篇文章SQL CHARINDEX() Has Data Size Limitations。
所以我代替CHARINDEX
與PATINDEX
,但我不知道PATINDEX
和CHARINDEX
之間的性能。
在存儲過程中,我一直使用CHARINDEX
來檢查NVARCHAR(MAX)
類型的變量,但是今天我發現CHARINDEX
有8,000字節的限制!PATINDEX和CHARINDEX之間的性能如何?
我覺得這篇文章SQL CHARINDEX() Has Data Size Limitations。
所以我代替CHARINDEX
與PATINDEX
,但我不知道PATINDEX
和CHARINDEX
之間的性能。
CHARINDEX對於您要查找的字符串限制爲8000。不是你正在搜索的字符串。
該文章可能是錯誤的,除非你想查找> 8000/4000長度的字符串。但是,它也使用不贊成使用的文本數據類型。它的日期是2007年,所以它使用的是SQL Server 2005或2000,但SQL Server 2005 BOL根本沒有提及8000,這不是我嘗試過的。
從SQL Server 2008 BOL:
CHARINDEX(表達式1,表達式2 [ ,START_LOCATION])
表達式是一個字符表達式 包含要找到的序列。 expression1限制爲8000 個字符。
expression2是要搜索的字符表達式。
注:PATINDEX沒有提到8000極限SQL 2008或2005
最後,我會使用CHARINDEX,因爲我認爲這是簡單的搜索更直觀,如果你不需要模式匹配和它支持長字符串
如果數據類型是text或ntext,CHARIndex對您要搜索的字符串有8000字節(非字符)限制。如果數據類型爲varchar(max)或nvarchar(max),則8000字節的限制不生效;它搜索整個字符串。 (我只是有點這樣。)我解決了這個剛剛使用CAST:CHARINDEX(searchterm, CAST(columnname as nvarchar(max))
我使用SQL Server 2008 – 2009-09-03 10:12:25