【问题标题】:Delete record 24 hours after insert插入后 24 小时删除记录
【发布时间】:2012-12-23 07:59:43
【问题描述】:

有没有办法在 Transact-SQL 中创建 24 小时后自动删除行?

我正在创建一个网站(学习体验),用户在注册后需要单击通过电子邮件发送的验证链接。我希望用户在 24 小时内验证自己。

我想我需要的是一个触发器,但我真的不确定语法,甚至是否可能。

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    我不确定您的架构,但我会以不同的方式进行。我将有一个与验证链接对应的数据库记录的日期/时间。当他们单击链接时,验证数据库记录的日期和时间是否在当前时间的 24 小时内。如果是,则允许,否则拒绝。

    【讨论】:

    • +1。为了解决实际问题,而不是对问题的感知解决方案。
    • 注意:将行标记为无效可以告诉人们“此链接已过期”(如果已过期)或“此链接无效”(如果不存在)。我假设您正在使用某种唯一键(例如 GUID)来确保人们无法猜测重置令牌
    • 甚至不需要将该行标记为无效。您可以按日期/时间确定有效性。
    • 在一些类似的应用程序中,我将验证检查编码为首先删除任何早于允许时间段的行,然后检查验证链接值。插入行的 SP 还可以删除旧行,从而控制表的增长。
    • +1 这正是我们在数据库中实现的逻辑。
    【解决方案2】:

    问:有没有办法在 Transact-SQL 中创建 24 小时后自动删除行?

    答:当然。编写“sqlcmd”脚本,将其包装在 .bat 文件中,然后从 Windows 计划任务中调用它:

    或者,根据您的版本,您可以从 SQL Server 代理安排相同的 SQL 脚本:

    对事物进行不同的解释:

    • 当用户点击您的链接时,您可以检查当前时间(相对于 MSSQL)是否为 >> 24 小时。如果是这样,您将回复“为时已晚”消息(而不是验证条目)。

    无论如何 - 你绝对、完全、完全,想要使用触发器!

    【讨论】:

    • 为什么我不想使用触发器?他们是不是太邪恶了,应该被丢在角落里被遗忘?
    • 没有。但是它们太邪恶了,无法解决这个特殊问题,您应该放弃这个想法(就像多萝西在“绿野仙踪”中对东方邪恶女巫所做的那样);)触发器对于某些问题非常有用。 ..这很荒谬。 正确的 解决方案是在用户单击链接时采取行动(正如我在帖子中所建议的那样)。恕我直言...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    相关资源
    最近更新 更多