admin

表变量行有限制吗?

sql

我的应用程序中有一个用户定义的函数,该函数以逗号分隔的列表作为参数。它拆分项目并将其插入到表变量中并返回结果。

此功能运行良好,但以逗号分隔的列表中的项目超过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;

阅读 45

收藏
2021-06-07

共1个答案

admin

您将输入变量定义为varchar(8000),而@Item变量为varchar(8)。您的商品通常每个都是8个字符吗?您发送的带有1000多个项目的字符串是否超过8000个字符?尝试将输入更改为varchar(max)。

2021-06-07