2010-08-12 100 views
2

我將如何去更新更新語句中的現有DateTime列? 我想減去一天,但我收到一條錯誤消息,說我不能在更新中使用DateAdd(有關溢出的內容)。如何在更新語句中減去並更新日期列?

我想出了這個查詢,但它當然不會執行。

begin tran upd 

    update answer 
    set SentForApprovalAt = DateAdd(day, -1, approvedAt) 
    where 
    approvedAt > '1753-01-01' 
    and approvedAt < modifiedAt 

commit tran upd 

我該怎麼辦?

+0

應該'approvedAt'和'modifiedAt'是'@ approvedAt'和'@ modifiedAt'?那只是一個錯字嗎? – AllenG 2010-08-12 17:46:14

回答

4

您收到此錯誤的原因很可能是因爲您試圖從中扣除1的日期導致結果值小於minimum value for a TSQL datetime

使用下面的測試用例:

CREATE TABLE answer 
(
SentForApprovalAt DATETIME NULL, 
ApprovedAT DATETIME, 
ModifiedAT DATETIME 
) 

/* The query will work for this record */ 
INSERT 
INTO Answer 
     (sentforapprovalat, approvedat, modifiedat) 
VALUES (null, '1800-01-01 00:00:00.000', GETDATE()) 

/* The query will error with 'Adding a value to a 'datetime' column 
    caused an overflow.' for this record */ 
INSERT 
INTO Answer 
     (sentforapprovalat, approvedat, modifiedat) 
VALUES (null, '1753-01-01 01:00:00.000', GETDATE())