【问题标题】:sql trigger not work as expectedsql 触发器无法按预期工作
【发布时间】:2011-05-28 14:13:30
【问题描述】:

当向客户表中添加一行时,它应该:

  • 复制到另一个名为 new_customer 的表
  • 删除客户表中的行。

在客户表中只有一个字段是电话号码。

此字段应复制到新客户表中,并应从客户表中删除。

谁能告诉我这个触发器有什么问题.....

CREATE TRIGGER update_cus
ON customer
FOR update AS
   IF (COLUMNS_UPDATED() & 1) > 0
      BEGIN

      INSERT INTO new_customer
         (Phone number
            )
         SELECT 'NEW',
            ins.Phone number
         FROM inserted ins

         SELECT 'OLD', 
            del.Phone number
         FROM deleted del

   END

【问题讨论】:

  • 看起来根本不像是有效的 SQL... 你想做什么?审核日志?
  • 这真的是 MySQL 吗?我认为COLUMNS_UPDATED() 是 SQL Server 主义。
  • 问题:字段真的是“电话号码”带空格吗? “电话号码”是两个表中的唯一键吗?您是否在上面尝试过这段代码:真实的列名、真实的表名?

标签: sql tsql triggers


【解决方案1】:

我的猜测

CREATE TRIGGER update_cus
ON customer
FOR update AS
   IF EXISTS (SELECT * FROM INSERTED)
   BEGIN

      INSERT INTO new_customer ([Phone number])
         SELECT 'NEW', ins.[Phone number]
         FROM inserted ins

      DELETE customer WHERE
         [Phone number] IN (SELECT [Phone number] FROM deleted)

   END

【讨论】:

  • 肯定也必须用于插入?据我所知,根据他的解释?你还有他在一个命名字段中插入两个值的尝试吗?
  • @Dems:我不确定。我认为 OP 想将一个表的值交换到另一个表(而不是 triiger?)你可能是对的。
  • 我已经尽力帮忙了,现在我要去洗澡、烧烤和足球比赛了。祝你好运:)
【解决方案2】:

您想要 INSERT 的行为,但已为 UPDATE 定义了触发器。

您的 INSERT 指定了一个字段,但您尝试插入 2 个值。

您声明要删除客户的记录,但没有 DELETE 语句。


我没有为您编写不同的触发器,因为我实际上并不能 100% 确定您要实现的目标。

您能否举个例子,包括不同的表格在不同操作之前和之后应该是什么样子?

编辑

CREATE TRIGGER update_cus
ON customer
FOR insert AS
BEGIN

  INSERT INTO new_customer (name, id)
  SELECT name, id
  FROM inserted

  DELETE customer WHERE
  id IN (SELECT id FROM deleted)
  -- This assumes id is Unique, but as the table should normally be empty, that's fine.

END

【讨论】:

  • @Denis 请在下面找到场景 1.向 customer1 表插入值(例如:- 插入 customer1(name,id) values("linda",1234);) 2.trigger 应该删除我的在customer1表中输入并在customer2表中输入相同的详细信息(customer1表将一直为空)非常感谢您的公司。
  • gbn 的答案已根据您的评论修改。
猜你喜欢
  • 2012-05-19
  • 2013-01-29
  • 1970-01-01
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 2021-05-29
  • 2011-03-11
  • 1970-01-01
相关资源
最近更新 更多