2013-03-26 33 views
0

我一直在使用下面這段代碼來分割輸入id,像FUNCTION_split('1,2,3',',')。現在問題在於它不適用於列表中超過100個的情況。無論如何修改這段代碼來處理超過100個ID的?SPlit函數錯誤 - 語句終止。最大遞歸100在語句完成之前已經耗盡

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 ; 
+0

謝謝編輯 – Bharath 2013-03-26 06:39:45

回答

1

您可以使用該選項MAXRECURSION在查詢

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

無限遞歸使用MAXRECURSION(0)

Query Hints

+0

這真是棒極了..謝謝噸.. – Bharath 2013-03-26 07:00:48