写一个sql存储过程来删除表中的数据?

时间:2011-08-23 16:54:22

标签: c# sql-server-2008 stored-procedures

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

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

我希望有一个存储过程,我可以从c#code.i尝试这样的事情,但我可以尝试Select * from studenttable where registereddate < GetDate()-7,但我无法达到我想要的......

7 个答案:

答案 0 :(得分: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 :(得分:3)

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

一个小技巧,允许您在第一次运行之前检查您将在delte statment中影响的记录。只需从SElect上运行以检查记录的选择,然后您就知道delte会在您执行之前影响正确的记录。

答案 2 :(得分: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

我希望这会有所帮助

答案 3 :(得分:1)

如果我正确阅读了您的问题,您只需将SELECT * FROM语法替换为DELETE语法

DELETE 
    studenttable 
WHERE 
    registereddate < @pYourDate

然后将日期作为c#

中的存储过程参数传递

答案 4 :(得分:0)

CREATE PROC
(@date smalldatetime)
AS
BEGIN

DELETE studenttable 
WHERE registereddate < (@date - 7)

END

提示:

  1. 您希望避免在WHERE子句中对regsitereddate执行任何操作,因此仍可以使用您的索引。
  2. @date被称为参数。查看C#函数中的参数。其他关键字:sqlcommand,addwithvalue()等

答案 5 :(得分:0)

-- =============================================
-- Author:      XXXX
-- Create date: xx-xx-xxxx
-- Description: Procedure for Deleting  From Table 
-- =============================================


CREATE PROCEDURE [dbo].[SP_Employee_Delete]
(
@EmpCode bigint=null,
@Msg nvarchar(MAX)=null OUTPUT
)
AS
BEGIN TRY

DELETE FROM tbl_Employees
WHERE EmpCode=@EmpCode

SET @Msg='Employee Deleted Successfully.'

END TRY
BEGIN CATCH
SET @Msg=ERROR_MESSAGE()
END CATCH

GO

答案 6 :(得分:0)

**创建或替换过程DELETE_ANY(ENO编号)

IS

开始

从EMP1删除

EMP_ID = ENO;

END;

致电

EXECUTE DELETE_ANY(1);