web-dev-qa-db-fra.com

Définissez un champ de base de données DateTime sur "Maintenant"

En code VB.net, je crée des requêtes avec des paramètres SQL. Si je mets un paramètre DateTime à la valeur DateTime. Maintenant, à quoi ma demande ressemblera-t-elle?

UPDATE table SET date = "2010/12/20 10:25:00";

ou

UPDATE table SET date = GETDATE();

Dans le premier cas, je suis sûr que chaque enregistrement sera réglé exactement au même moment. Dans le second cas, cela dépend de la façon dont le SGBD traite la demande. Ce qui m'amène à la deuxième question: SQL Server définit-il les mêmes date et heure lors de la mise à jour d'une grande table avec NOW ()?

EDIT: a remplacé NOW () (qui n'existe pas dans SQL Server) par GETDATE ().

83
Thibault Witzig

En SQL, vous devez utiliser GETDATE():

UPDATE table SET date = GETDATE();

Il n'y a pas de fonction NOW().


Pour répondre à ta question:

Dans une grande table, étant donné que la fonction est évaluée pour chaque ligne, vous obtiendrez des valeurs différentes pour le champ mis à jour.

Donc, si votre exigence est de régler tout à la même date, je ferais quelque chose comme ceci (non testé):

DECLARE @currDate DATETIME;
SET @currDate = GETDATE();

UPDATE table SET date = @currDate;
154
Oded

Une alternative à GETDATE () est CURRENT_TIMESTAMP. Fait exactement la même chose.

19
Don Simon

Utilisez GETDATE ()

Renvoie l'horodatage système actuel de la base de données sous la forme d'une valeur datetime sans le décalage du fuseau horaire de la base de données. Cette valeur est dérivée du système d'exploitation de l'ordinateur sur lequel l'instance de SQL Server est en cours d'exécution.

UPDATE table SET date = GETDATE()
7
Adriaan Stander