我有一个简单的应用程序,它将数据存储到名为student table的sql server数据库表中。表的设计如下3列。名称,性别和注册时间(日期时间)。在我的WPF窗口中,我有三个字段将数据插入到表中。现在我想根据用户给出的输入(这是一个datetimepicker)来删除按钮。
如何从与用户给出的日期相比的7天的表中删除数据。 ?
我希望有一个存储过程,我可以从c#code.i尝试这样的事情,但我可以尝试Select * from studenttable where registereddate < GetDate()-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
提示:
regsitereddate
执行任何操作,因此仍可以使用您的索引。答案 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);