基于日期的2005年存储过程

问题描述

| 我可以写存储过程基于日期删除表中的行
create proc uspInvoicePaymentsdelete3
@PaymentDate datetime
as
begin
delete from tblInvoicePaymentDetails where PaymentDate=@PaymentDate
end
但是行未删除,我正在发送参数值是\'6/15/2011 3:40:18 PM \',但是在我的sql server2005中它采用24小时格式,因此没有行被删除如何更改日期。(表日期格式和参数日期是相同格式,但存储过程转换为24小时格式)
 delete from tblInvoicePaymentDetails where PaymentDate=\'6/15/2011 3:40:18 PM\'
但我的要求是日期时间也要考虑秒针 问题是我发送参数日期和数据库日期都相同,但是输出是没有行被删除什么问题和如何写存储过程 请给我正确的解决方
      Name            Date           amount  id
    hemanth 6/15/2011 3:40:18 PM    100 1003
    hemanth 6/15/2011 3:40:42 PM    100 1003
谢谢你 灵长类     

解决方法

        该问题可能与以下事实有关,正如@Andrew在他对问题的评论中指出的那样,表中的日期时间值也包含毫秒,而您传递的值中不包含毫秒。 如果是这样,则可以这样更改DELETE语句的WHERE子句:
WHERE PaymentDate >= @PaymentDate
  AND PaymentDate < DATEADD(second,1,@PaymentDate)
但是请注意,这可能导致删除多个行。例如,您具有以下数据:
Name    PaymentDate             amount id
------- ----------------------- ------ ----
…       …                       …      …
hemanth 2011-06-15 15:40:18.550 100    1003
hemanth 2011-06-15 15:40:18.987 100    1003
hemanth 2011-06-15 15:40:42.363 100    1003
…       …                       …      …
如果忽略毫秒,则此处有两行具有相同的
PaymentDate
值。也许,这种情况对于您的应用程序是不可能的,因此您不必为此担心。我只是想确保您知道,从技术上讲,当您使用不完整的日期/时间值作为参数时,可以删除多个记录。