【问题标题】:Using trigger on view depending value change根据值变化在视图上使用触发器
【发布时间】:2021-05-20 08:32:42
【问题描述】:

我有这样的看法

CREATE VIEW cust_bonus
AS

SELECT sale_id, customer, saletotal, saletotal*10/100 AS bonus, 1 type FROM sales

UNION ALL
SELECT doc_id, customer, 0, bonus, 1 type FROM bonusplus

UNION ALL
SELECT doc_id, customer, 0, bonus, -1 type FROM bonusminus

当奖金列的值发生变化时,我需要一个触发器来将奖金和客户信息插入另一个表。例如 SELECT SUM(bonus*type) from custbonus 返回 50 然后我在销售额或奖金加减中插入一行。然后相同的语句返回 60 或等等。我不想为这个视图上的每个表写 3 个触发器

【问题讨论】:

  • 请不要对我们大喊大叫(在标题中),这会让人觉得很粗鲁,很容易引起反对票和/或接近投票。
  • 至于你在问什么,到目前为止你有什么尝试?为什么它不起作用?此外,SQL Server 2008 已经完全不受支持一段时间了。获得受支持的版本已经很久了。
  • 啊抱歉,我认为大写锁定的标题会更好
  • 我只能为每个表编写 3 个不同的触发器。我找不到其他方法。
  • 我建议您的数据模型和业务逻辑存在很大缺陷。奖金就像账户余额。随着 的变化,它会随着时间的推移“累积”。通常,这些是从特定时间点发生的特定类型的事务。在另一个时间点,该奖金被授予或支付,时钟再次开始。也许那个时期是隐含的,因为您打算从提到的 3 个表中清除行 - 但这似乎不太可能。是的 - 您可以为一个表编写许多所有类型的触发器。不常见,但可以做到。

标签: sql sql-server sql-server-2008


【解决方案1】:

你可以试试,像这样在 而不是 UPDATE

IF UPDATE(bonus)
BEGIN
    print 'do it something'
END

-- end todo update statement

【讨论】:

    猜你喜欢
    • 2014-08-11
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多