我的应用程序中有一个用户定义的函数,该函数以逗号分隔的列表作为参数。它拆分项目并将其插入到表变量中并返回结果。
此功能运行良好,但以逗号分隔的列表中的项目超过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;
您将输入变量定义为varchar(8000),而@Item变量为varchar(8)。您的商品通常每个都是8个字符吗?您发送的带有1000多个项目的字符串是否超过8000个字符?尝试将输入更改为varchar(max)。