J'ai dans mon application une fonction définie par l'utilisateur qui prend une liste séparée par des virgules comme argument. Il divise les éléments et les branche dans une variable de table et renvoie le résultat.Limitation de ligne variable de table?
Cette fonction fonctionne bien, sauf que lorsque les éléments de la liste séparée par des virgules dépassent 1000, elle ignore le reste. C'est-à-dire, si je branche en 1239, les 1000 premières lignes seront retournées et les 239 restantes seront entièrement ignorées. Il n'y a pas d'erreurs quand cela se produit.
Je ne peux m'empêcher de penser que cela est dû à une sorte de limitation que je devrais connaître, mais je n'arrive pas à trouver d'informations à ce sujet. Est-ce une limitation sur la quantité de lignes qui peuvent être stockées dans une variable de table? Ou est-ce que je manque quelque chose dans le code lui-même? Quelqu'un peut-il aider? Aller aux yeux écarquillés ici.
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;
Bang sur Merci mon pote, je ne peux pas croire que je ne vois pas que j'augmenté la variable varchar MAX et cela a fonctionné Chacun des articles sont 7 Ils sont séparés par une seule virgule, ce qui signifie que la longueur de la chaîne a toujours été tronquée à exactement 1000 enregistrements. de nvarchar (max)? –
La limite est qu'il ne peut pas être indexé. –