Oui, vous devez faire correspondre la précision de la valeur DateTime à la milliseconde pour que l'égalité fonctionne.
Votre alternative proposée fonctionnera. Comme une autre idée, vous pouvez utiliser un cast and convert pour tronquer votre datetime stocké à la seconde. Notez cependant que l'utilisation de ces fonctions dans la clause where annulera la capacité de l'optimiseur à utiliser n'importe quel index sur votre colonne datetime. Vous devrez décider quel impact cela aurait sur votre environnement spécifique.
/* CONVERT style 20 is yyyy-mm-dd hh:mi:ss */
Select column1
From TABLE
where ForeignKey=1
and CAST(CONVERT(char(19),DateTime,20) as datetime) = '08/26/2010 11:24:36'
EDIT: Faisant suite aux commentaires ci-dessous, je l'ai remarqué que SQL Server ne semble pas ramasser une différence de 1 milliseconde dans une comparaison. Cela est vrai dans les environnements 2000/2005/2008. Si j'utilise le nouveau type de données datetime2 en 2008, cela fonctionne comme prévu. La lecture sur le datetime type de données, la précision de la partie milliseconde est arrondie:
Précision: Arrondi à des incréments de 0,000, .003 ou .007 secondes
declare @datetime1 datetime
declare @datetime2 datetime
declare @datetime3 datetime
declare @datetime4 datetime
set @datetime1 = '2010-08-30 08:41:51.513'
set @datetime2 = '2010-08-30 08:41:51.513'
set @datetime3 = '2010-08-30 08:41:51.514'
set @datetime4 = '2010-08-30 08:41:51.515'
/* Expected result 'Equal'; Actual result 'Equal' */
if @datetime1 = @datetime2
print 'Equal'
else
print 'Not Equal'
/* Expected result 'Not Equal'; Actual result 'Equal' */
if @datetime1 = @datetime3
print 'Equal'
else
print 'Not Equal'
/* Expected result 'Not Equal'; Actual result 'Not Equal' */
if @datetime1 = @datetime4
print 'Equal'
else
print 'Not Equal'
Très similaire question et réponse peut être trouvé ici: http://stackoverflow.com/questions/3286849/ – 8kb
10x 8kb .. C'est une question similaire que je n'ai pas réussi à trouver. –