基于日期的2005年存储过程

时间:2011-06-15 10:48:51

标签: sql-server-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

感谢你 hemanth

1 个答案:

答案 0 :(得分:1)

问题可能与这样一个事实有关,正如@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值。也许,您的应用程序无法实现这样的情况,因此您无需担心这一点。我只是想确保您知道,从技术上讲,当您使用不完整的日期/时间值作为参数时,可以删除多个记录。