2009-08-20 7 views
2

J'écris une fonction pour traiter certaines données CSV. Voilà ce que je l'ai écrit à ce jour ...Bogue de SQL Server?

CREATE FUNCTION dbo.FGetCommaSeperatedValues(@csv as text) 
RETURNS @tblIds TABLE(id int,csvlength int) 
AS 
BEGIN 
    DECLARE @csvlength AS int 
    --SET @csvlength = datalength(@csv); 
    SET @csvlength = 7685 
    DECLARE @currentIndex AS int 
    SET @currentIndex = 0 
     WHILE @currentIndex < @csvlength 
      BEGIN 
       --INSERT INTO @tblIds SELECT @currentIndex,@csvlength 
       INSERT INTO @tblIds (id,csvlength) values (@currentIndex,@csvlength) 
       SET @currentIndex = @currentIndex+1 
      END 
    RETURN 
END 

Mon problème est que quand j'exécute la fonction, en utilisant la commande suivante ...

SELECT * FROM FGetCommaSeperatedValues('') 

Le tableau ne montre pas retourné les résultats que j'attends.

Tout va bien jusqu'à environ la ligne 3624 ou plus (comme prévu, la colonne d'identification incrémente de 1) Ensuite, les valeurs incrémentent de manière erratique.

Mon collègue a testé ce code dans SQL Server 2008 et tout fonctionne correctement. Cela semble être isolé au serveur SQL 2000.

Quelqu'un connaît-il ce bogue et/ou sa résolution?

Répondre

4

Pour gaurantee ordre de tri dans SQL Server, vous devez utiliser la clause ORDER BY.

ORDER BY CLAUSE

+0

Doh !, oui, bien sûr! –

+0

Vous seriez surpris combien de personnes ont été prises par celui-ci! –