1

このエラーの取得:

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

CASE U.BasePool 
            WHEN 0 THEN 'N/A'
            WHEN -1 THEN 'N/A'
            ELSE CASE 
                    WHEN SUM(SUM(B.TransactionCount)) OVER (Partition by U.ContractID) > U.BasePool THEN 'IN-OVERAGE'
                    --WHEN SUM(SUM(B.TransactionCount)) OVER (Partition by U.ContractID) + (SUM(SUM(B.TransactionCount))  OVER (Partition by U.ContractID)/MonthNum) > U.BasePool THEN DATEADD(MM, 1, GETDATE())
                    ELSE  CASE WHEN MonthNum<1 THEN NULL ELSE CONVERT(VARCHAR(20),DATEADD(MM,CAST(ROUND((U.BasePool - SUM(SUM(B.TransactionCount))  OVER (Partition by U.ContractID)) 
                                /(SUM(SUM(B.TransactionCount))  OVER (Partition by U.ContractID)/MonthNum),0) as Int), GETDATE()),101)

                    --(basepool - sumcontract) / (sumcontract/monthNum ) is the expected months to reach overage
                END 
            END
            END AS  ExpectedDate
4

1 に答える 1

3

最大datetime値は「9999-12-31」であるため、約 95840 か月を追加できgetdate() ます。これにより、エラーが正確に生成されます。

select dateadd(month,95841, getdate() )

追加する月数の計算を間違えたに違いありません。

于 2013-04-26T12:13:32.447 に答える