【问题标题】:deleting table records in SQL server 2005 database and keep the deleted records删除 SQL server 2005 数据库中的表记录并保留已删除的记录
【发布时间】:2014-03-02 09:56:40
【问题描述】:

我正在使用 asp.NET C#,并且我在 SQL Server 2005 数据库中有一个表。一旦学生单击应用程序界面中的特定按钮,将从会话中获取的学生 ID 应存储在 StudentID 属性中。在特定时间(例如:上午 9:00)我想自动删除表记录。如果我能够将这些已删除的记录存档在某个地方会更好。 我在谷歌搜索,我发现我必须做一个日志触发器,但我不确定这是否是我想要每天两次(在两个不同的小时内)删除表记录的情况下的最佳解决方案!

实际上我从不使用触发器,但我读到它曾经以某种方式删除记录。

任何有关删除 SQL Server 2005 数据库中的表记录的帮助将不胜感激..

谢谢。

【问题讨论】:

    标签: c# sql-server sql-server-2005 triggers


    【解决方案1】:

    常规的 SQL 触发器应该可以正常工作:

    create trigger FooDeleteTrigger on Foo
    after delete
    as
    insert FooArchive (...columns...)
    select ...columns...
    from deleted
    

    或者,多合一命令:

    delete from Foo
    output deleted.col1, deleted.col2, ...
    into FooArchive
    --where clause as needed, etc
    

    【讨论】:

    • 我不确定哪个更好用?触发器或存储过程?我在这两个方面都没有经验。所以请帮我决定..
    • @user3287580 都可以正常工作,尽管我实际上并没有在任何时候提到存储过程
    【解决方案2】:

    编写一个存储过程以从表中删除记录,并在同一个 SP 写入语句中将删除的记录插入存档表中。您可以使用 deleted 关键字来访问表中已删除的行。现在,一旦您完成了 SP 的编写,在此 SP 上的 SQL Server 中创建一个作业,并根据您的要求安排它。

    或者,您只能将删除逻辑放在存储过程中,并将插入到存档表的逻辑移动到主表上开发的触发器。

    查看此内容以供参考:http://technet.microsoft.com/en-us/library/ms177564.aspx

    【讨论】:

    • 这里不清楚创建存储过程会增加多少
    • @MarcGravell 是的,你是对的,它可以在不创建 SP 的情况下完成。根据我的观点,使用 SP 创建 SQL 作业将更易于维护,因为它还增加了可重用性(相同的 SP 可用于一个或多个 sql server 作业)。
    • 似乎要求是定期删除和归档数据。根据我的观点,为了满足需求,sql job应该是最合适的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多