web-dev-qa-db-ja.com

CTE列によりオーバーフローが発生しました-注文者のみ!

;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;

あまり興味深いクエリはありませんが、ORDER BY句を指定して実行すると、エラーメッセージが表示されます。

メッセージ517、レベル16、状態1、行4

「datetime」列に値を追加すると、オーバーフローが発生しました。

ただし、ORDER BY句がなければ、問題なく動作します。さらに、同じサーバー上の同じインスタンスに含まれる他のカタログでクエリを実行すると、ORDER BY句の有無にかかわらず、クエリは正常に実行されます。

影響を受けるカタログと、クエリが期待どおりに実行されるカタログとの間の構成オプションと互換性レベルを確認しましたが、違いを保証するものは何も見つかりませんでした。他の誰かが同様の問題に遭遇しましたか?当面は回避できますが、問題が何であれ、修正できることが理想的です。

潜在的なヒント-カタログに比較的多数のオブジェクトがある場合(> 5000)、エラーを再現できる可能性があります...これは私の最大のカタログで発生しており、TOPをCTE、ORDER BYの問題はなくなりました。

7
Avarkx

休日の二日酔いかな。

クエリの外部部分のORDER BYは、リストを正しく順序付けるために、完全なリストの作成を強制する場合があります。 sys.objectsから5k +行が返されると、DATETIMEデータ型がオーバーフローして、25 MM日以上の日付を作成しようとしています。

1
Avarkx