2011-08-23 41 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()等。
相關問題