2011-08-23 84 views
2

我有一个简单的应用程序,它将数据存储到名为student table的sql server数据库表中。表的设计如下3 colums。姓名,性别和注册时间(日期时间)。在我的WPF窗口中,我有三个字段将数据插入到表中。现在,我想要基于用户给出的输入(这是一个datetimepicker)的删除按钮。写一个sql存储过程从表中删除数据?

如何从7天的表格中删除与用户给出的日期相比较的数据。 ?

我想有一个存储过程,我可以从C#code.i我能够尝试这样的,但Select * from studenttable where registereddate < GetDate()-7有些事情叫,但我无法做到什么,我应该......

+1

如果这是作业,请给它加标签。 – Yuck

回答

3

你可能需要使用DATEADD功能:

DELETE StudentTable 
WHERE DATEADD(day,-7,GetDate()) > registeredDate 

确保你做的相当的选择首先要确保你删除你想要什么:

SELECT * FROM StudentTable 
WHERE DATEADD(day,-7,GetDate()) > registeredDate 

你的存储过程会是这个样子:

CREATE PROCEDURE DeleteRecent AS 
BEGIN 
    DELETE StudentTable 
    WHERE DATEADD(day,-7,GetDate()) > registeredDate 
END 
GO 
1
create procedur spDeleteByDate 
@dateTo datetime 
as 
begin 

declare @dateFrom datetime; 
set @dateFrom = select DATEADD(day, -7, @dateTo) 

delete from your_table where [your_date_column] between @dateFrom and @dateTo 

end 

我希望这有助于

1

如果我正确地读你的问题,你只是DELETE语法

DELETE 
    studenttable 
WHERE 
    registereddate < @pYourDate 

取代你SELECT * FROM语法然后你传入日期作为存储过程参数从c#

3
DELETE ST 
--SELECT * 
FROM StudentTable ST 
WHERE DATEADD(day,-7,GetDate()) > registeredDate 

一个小窍门,允许您在第一次运行之前检查您将影响记录的记录。只需从SElect上运行以检查选定的记录,然后您知道delte在执行操作之前会影响正确的记录。

+0

+1我多次误删了行,因为我忘了先用'SELECT'来检查它们。 – Matthew

+0

@Matthew PK,这就是为什么我喜欢这种查询的组合形式 – HLGEM

0
CREATE PROC 
(@date smalldatetime) 
AS 
BEGIN 

DELETE studenttable 
WHERE registereddate < (@date - 7) 

END 

提示:

  1. 你想避免在regsitereddate做任何功能在WHERE子句,所以仍然可以使用你的索引。
  2. @date被称为参数。查看你的C#函数中的参数。其他关键字有:sqlcommand,addwithvalue()等。
相关问题