Как назначить большую объединенную строку и разбить ее в SQL Server 2008 - PullRequest
0 голосов
/ 02 августа 2011

У меня есть объединенная строка, которую я принял за 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

Ответы [ 2 ]

1 голос
/ 02 августа 2011

Ваша функция разделения основана на методе таблицы чисел, используя ваш utils.numbers?

Что это говорит?

SELECT COUNT(*), MAX(numberid) utils.numbers

Достаточно ли у вас чисел, чтобы иметь дело с полной длиной строки, потенциально 1 млрд, потому что это nvarchar (max)?

Я подозреваю, что у вас есть только 10000 строк, что вызывает усечение. 9998 приходит с последней позиции , до того, как у вас закончатся цифры

1 голос
/ 02 августа 2011
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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...