2010-08-12 6 views
2

Comment procéder pour mettre à jour les colonnes DateTime existantes dans une instruction de mise à jour? Je voudrais soustraire un jour mais je reçois un message d'erreur disant que je ne peux pas utiliser DateAdd dans une mise à jour (quelque chose à propos d'un débordement).Comment soustraire et mettre à jour une colonne de date dans une instruction de mise à jour?

Je suis venu avec cette requête, mais bien sûr, il ne sera pas exécuté.

begin tran upd 

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

commit tran upd 

Que dois-je faire?

+0

Si 'approvedAt' et' modifiedAt' sont '@ approvedAt' et' @ modifiedAt'? C'était juste une faute de frappe? – AllenG

Répondre

4

La raison pour laquelle vous recevez cette erreur est probablement due au fait que la date à laquelle vous tentez de soustraire 1 entraîne une valeur inférieure à minimum value for a TSQL datetime.

Utilisation de la testcase suivante:

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()) 
Questions connexes