当前位置: 首页 > 面试题库 >

在使用DELETE TRIGGER进行DELETE之前将已删除的值插入表中

柳和怡
2023-03-14
问题内容

由于某种原因,我找不到我需要的确切答案。我在这里搜索了最后20分钟。

我知道这很简单。很简单。但是由于某种原因,我无法触发扳机。

我有两列的桌子

dbo.HashTags

|__Id_|_name_|
|  1  | Love |

我想将已删除的值插入到另一个dbo.HashTagsArchiveDELETE查询中调用的表中。

例子:

DELETE FROM [dbo].[HashTags] WHERE Id=1

在此示例之后,我应该具有已删除的行,dbo.HashTagsArchive并且具有的行Id=1应被删除dbo.HashTags

我尝试了这个TRIGGER:

ALTER TRIGGER [dbo].[HashTags_BeforeDelete]
    ON [dbo].[HashTags]
    FOR DELETE
AS
  BEGIN
    INSERT INTO HashTagsArchive
   ( Id,
     HashTagId,
     delete_date)
   SELECT d.Id, m.HashTagId,GETUTCDATE() FROM deleted d 
   JOIN dbo.HashTags m ON m.Id=d.Id
    DELETE FROM dbo.HashTags
    WHERE ID IN(SELECT deleted.Id FROM deleted)
  END
GO

它越来越,Deleted但没有InsertedHashTagsArchtml" target="_blank">hive


问题答案:

您的问题是:删除 已发生* ,此触发器将触发。因此,您无需再加入任何行! *HashTags

您需要改用以下触发器:

ALTER TRIGGER [dbo].[HashTags_BeforeDelete]
    ON [dbo].[HashTags]
    FOR DELETE
AS
  BEGIN
    INSERT INTO HashTagsArchive(Id, HashTagId, delete_date)
       SELECT 
           d.Id, d.HashTagId, GETUTCDATE() 
       FROM deleted d 
  END
GO

Deleted伪表包含 整行(S) 已删除的-无需加入任何东西…

另外:删除发生后,此触发器将触发-因此您无需在触发器内部做任何事情-只需将这些信息插入存档表中即可。其他所有内容都由SQL Server为您处理。



 类似资料:
  • 问题内容: 在很多情况下,您需要根据某些条件执行INSERT,UPDATE或DELETE语句。我的问题是,对查询性能的影响是否在命令前添加了IF EXISTS。 例子 INSERT或DELETE呢? 问题答案: 我不太确定,但是我得到的印象是,这个问题实际上是关于upsert的,它是以下原子操作: 如果该行同时存在于源和目标中,则为目标。 如果该行仅存在于源中,则该行进入目标;否则,该行进入目标。

  • 我正在尝试将客户端模型中的contact\u phone列设置为整数数据类型。我仍然希望能够允许用户以他们喜欢的任何格式(即999-999-9999或999.999.9999)输入电话号码,并在将其验证为有效电话号码之前去掉任何非数字字符。 不幸的是,Rails似乎不想让我在验证之前对数据运行gsub,因为它是FixNum数据类型。这是否意味着我必须将其设置为数据库中的字符串,以允许用户在验证之前

  • 问题内容: 我的表包含一个名为datetime的列,其中包含日期和时间为 我要删除一个小时的行。请提出一些查询。 这就是我尝试过的。 问题答案: 使用:

  • delete 删除表中的数据delete($table, $where) table [string] 表名. where [array] WHERE 删除条件.Return: [number] 返回被删除的行数.一个比较危险的操作,操作前请考虑好。。。 $database->delete("account", [ "AND" => [ "type" => "business"

  • delete 删除表中的数据delete($table, $where) table [string] 表名. where [array] WHERE 删除条件.Return: [PDOStatement]返回 PDOStatement对象一个比较危险的操作,操作前请考虑好。。。 $database->delete("account", [ "AND" => [ "type" => "busin

  • 问题内容: 我为几个表创建触发器。触发器具有相同的逻辑。我将要使用一个通用的存储过程。但是我不知道如何处理 插入 和 删除的 表。 例子: 问题答案: 您可以使用表值参数存储触发器中插入/删除的值,并将其传递给proc。例如,如果您在proc中所需的全部是UNIQUE : 然后从触发器中传递插入/删除的ID,例如: