私はこの以下のコードを使用して、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 ;