我有一个连接的字符串,我把它作为nvarchar(max) 但它只检索9998个字符。
我想获取连接字符串中的所有字符。
如何检索所有字符?
ALTER function [utils].[udf_SplitString]
(
@iSearchText NVARCHAR(MAX)
,@iSearchExpr VARCHAR(10)
)
Returns @Results Table(id integer identity,SearchText NVARCHAR(MAX),ElementValue VARCHAR(max))
As
BEGIN
Insert into @Results
(SearchText,ElementValue)
------- Split........
SELECT SearchText,
NullIf(SubString(SearchExpr + SearchText + SearchExpr , PositionedAt , CharIndex(SearchExpr , SearchExpr + SearchText + SearchExpr , PositionedAt) - PositionedAt) , '') AS SearchText
FROM (select numberid PositionedAt from utils.numbers) Occurences,
(
select
@iSearchText as SearchText,
@iSearchExpr as SearchExpr
) dual
WHERE PositionedAt <= Len(SearchExpr + SearchText + SearchExpr) AND SubString(SearchExpr + SearchText + SearchExpr , PositionedAt - 1, 1) = SearchExpr
AND CharIndex(SearchExpr , SearchExpr + SearchText + SearchExpr , PositionedAt) - PositionedAt > 0
------------ End of Split
Return
End
答案 0 :(得分:1)
CREATE Function [dbo].[ParseStringList] (@StringArray nvarchar(max) )
Returns @tbl_string Table (ParsedString nvarchar(max)) As
BEGIN
DECLARE @end Int,
@start Int
SET @stringArray = @StringArray + ','
SET @start=1
SET @end=1
WHILE @end<Len(@StringArray)
BEGIN
SET @end = CharIndex(',', @StringArray, @end)
INSERT INTO @tbl_string
SELECT
Substring(@StringArray, @start, @end-@start)
SET @start=@end+1
SET @end = @end+1
END
RETURN
END
像这样使用:
Select ParsedString From dbo.ParseStringList(@StringArray)
答案 1 :(得分:1)
您的分割功能是基于“数字”表技术,使用您的utils.numbers
?
这是什么意思?
SELECT COUNT(*), MAX(numberid) utils.numbers
你有足够的数字来处理完整的字符串长度,可能是10亿,因为它是nvarchar(max)?
我怀疑你只有10000行导致你的截断。在您用完数字之前,9998来自最后,
位置