web-dev-qa-db-fra.com

La colonne CTE a provoqué un débordement - commander uniquement!

;WITH
cte_Date ( DateCode_FK ) AS (
    SELECT  DATEADD( DAY, 
                1 - ROW_NUMBER() OVER ( 
                        ORDER BY so1.object_id ),
                GETDATE() )
    FROM    sys.objects so1
    CROSS APPLY sys.objects so2 )
SELECT  TOP 10 d.DateCode_FK
FROM    cte_Date d
ORDER BY d.DateCode_FK DESC;

Rien d'une requête trop intéressante, mais je reçois un message d'erreur si je l'exécute avec le ORDER BY Clause:

MSG 517, niveau 16, état 1, ligne 4

Ajout d'une valeur à une colonne "DateTime" a provoqué un débordement.

Cependant, sans le ORDER BY Clause, il fonctionne très bien. De plus, si j'exécute la requête sur d'autres catalogues contenues dans la même instance sur le même serveur, la requête fonctionne bien avec ou sans le ORDER BY clause.

J'ai examiné les options de configuration et les niveaux de compatibilité entre le catalogue concerné et un catalogue sur lequel la requête fonctionne comme prévu, mais n'a rien trouvé qui pourrait justifier la différence. Quelqu'un d'autre a-t-il rencontré un problème similaire? Je peux travailler autour de cela pour le moment, mais il aurait idéalement besoin de pouvoir résoudre le problème, quoi qu'il soit.

Indice potentiel - si vous avez un nombre relativement grand d'objets dans un catalogue (> 5000), vous-pouvez reproduire l'erreur ... Cela se produit sur mon plus grand catalogue et il semble que si j'inclus un top in Le CTE, l'ordre par numéro disparaît.

7
Avarkx

Holiday Hangover je suppose.

Le ORDER BY Dans la partie externe de la requête oblige parfois le bâtiment de la liste complète afin de le commander correctement. Avec 5k + rangées retournées de sys.objects, le type de données DATETIME débordne en essayant de créer des dates de plus de 25 mm de jours.

1
Avarkx