В моем приложении есть пользовательская функция, которая принимает список через запятую в качестве аргумента. Он разделяет элементы и вставляет их в переменную таблицы и возвращает результат.
Эта функция работает хорошо, за исключением того, что когда элементы в списке через запятую превышают 1000, она игнорирует остаток. То есть, если я подключу 1239, первые 1000 строк будут возвращены, а оставшиеся 239 полностью проигнорированы. Там нет ошибок, когда это происходит.
Я не могу не чувствовать, что это связано с какими-то ограничениями, о которых я должен знать, но я не могу найти какую-либо информацию об этом. Это ограничение на количество строк, которые могут быть сохранены в табличной переменной? Или я что-то упускаю в самом коде? Кто-нибудь может помочь? Иди сюда с белыми глазами.
ALTER FUNCTION [dbo].[ufnConvertArrayToIntTable] (@IntArray VARCHAR(8000))
RETURNS @retIntTable TABLE
(
ID int
)
AS
BEGIN
DECLARE @Delimiter char(1)
SET @Delimiter = ','
DECLARE @Item varchar(8)
IF CHARINDEX(@Delimiter,@IntArray,0) <> 0
BEGIN
WHILE CHARINDEX(@Delimiter,@IntArray,0) <> 0
BEGIN
SELECT
@Item = RTRIM(LTRIM(SUBSTRING(@IntArray,1,CHARINDEX(@Delimiter,@IntArray,0)-1))),
@IntArray = RTRIM(LTRIM(SUBSTRING(@IntArray,CHARINDEX(@Delimiter,@IntArray,0)+1,LEN(@IntArray))))
IF LEN(@Item) > 0
INSERT INTO @retIntTable SELECT @Item
END
IF LEN(@IntArray) > 0
INSERT INTO @retIntTable SELECT @IntArray
END
ELSE
BEGIN
IF LEN(@IntArray) > 0
INSERT INTO @retIntTable SELECT @IntArray
END
RETURN
END;