0

私はこの以下のコードを使用して、FUNCTION_split( '1,2,3'、'、')のように入力IDを分割しています。ここで問題となるのは、リスト内の100を超えるケースでは機能しないことです。100を超えるIDを処理するようにこのコードを変更する方法はありますか?

CREATE FUNCTION [dbo].[FUNCTION_split]  
 (@list  NVARCHAR(MAX),  
  @delimiter NCHAR(1) = ',')   
    RETURNS TABLE   
AS  

RETURN  
    WITH cte_list([BeginChar], [EndChar]) AS (  
        SELECT [BeginChar] = CONVERT(BIGINT, 1), [EndChar] = CHARINDEX(@delimiter, @list + @delimiter)  
    UNION ALL  
        SELECT [BeginChar] = [EndChar] + 1, [EndChar] = CHARINDEX(@delimiter, @list + @delimiter, [EndChar] + 1)  
    FROM cte_list 
        WHERE  [EndChar] > 0  
    )  
    SELECT LTRIM(RTRIM(SUBSTRING(@list, [BeginChar],  
        CASE WHEN [EndChar] > 0 THEN [EndChar] - [BeginChar] ELSE 0 END))) AS [ParsedValue]  
    FROM cte_list 
        WHERE [EndChar] > 0 ; 
4

1 に答える 1

1

クエリでオプションMAXRECURSIONを使用できます

SELECT * FROM [dbo].[FUNCTION_split] ( @p1 , @p2 ) OPTION ( MAXRECURSION 30000 );

無制限の再帰の場合はMaxrecursion(0)を使用します

クエリのヒント

于 2013-03-26T06:44:33.830 に答える