はい、等式を機能させるには、DateTime 値の精度をミリ秒に一致させる必要があります。
提案された代替案は機能します。別のアイデアとして、キャストと変換を使用して、保存されている日時を秒に切り詰めることができます。ただし、where 句でこれらの関数を使用すると、datetime 列で任意のインデックスを使用するオプティマイザの機能が無効になることに注意してください。特定の環境にどのような影響があるかを判断する必要があります。
/* 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'
編集: 以下のコメントをフォローアップすると、SQL Server が比較で 1 ミリ秒の違いを検出していないように見えることに気付きました。これは、2000/2005/2008 環境に当てはまります。2008 年に新しいdatetime2データ型を使用すると、期待どおりに動作します。日時データ型を読み取ると、ミリ秒部分の精度が丸められます。
精度: .000、.003、または .007 秒単位で丸められます
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'