【问题标题】:Using trigger to insert automatically from other table使用触发器从其他表中自动插入
【发布时间】:2020-09-24 05:29:15
【问题描述】:

我需要在 SQL Server 数据库中创建触发器,以便用户在表中插入一行后,它会自动从两个表中的 bill Account 导入另一个表中的账单编号,并将其插入我当前表的 userCode 列中,我的查询是:

ALTER TRIGGER [dbo].[payTrigger]
ON [dbo].[Payment] AFTER INSERT As 
BEGIN
    update Payment
        set userCode = (
            select Bill.userCode 
            from Bill
            inner join Payment on Bill.BillAccount = Payment.BillAccount 
        ) 

问题是:查询返回所有列,如何让它导入有关 userCode 的特定字段,当我尝试插入新行时,出现此错误:

子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。

【问题讨论】:

  • 您说您使用 MySQL 数据库,但 SQL 语法声称您使用 MS SQL aka SQL Server。调整。
  • Bill 表中有很多不同的userCode 值与相同的BillAccount 匹配。您必须根据某些条件选择其中之一 - 例如,您可能会在子查询中使用 select MIN(Bill.userCode) 得到最小化。
  • @Akina 非常感谢 Akina,我添加了 select MIN(Bill.userCode) 但它为所有行返回一个 userCode,我需要根据 BillAccount 返回
  • 添加适当的 WHERE - 比如WHERE Payment.ID = INSERTED.ID
  • @Akina 非常感谢您,这是工作,您可以发布您的答案以将其标记为未来用户的答案吗?非常感谢

标签: sql-server database triggers subquery


【解决方案1】:
  1. Bill 表中有很多不同的userCode 值与相同的BillAccount 匹配。您必须根据某些条件选择其中之一 - 例如,您可能会在子查询中使用 select MIN(Bill.userCode) 得到最小化。

  2. 对于仅更新新插入的行,您必须添加 WHERE Payment.ID = INSERTED.ID - 没有它,所有表行都将被更新。

【讨论】:

    猜你喜欢
    • 2014-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    相关资源
    最近更新 更多