【问题标题】:MS SQL: doesn't an "INSTEAD OF INSERT" trigger get outdated?MS SQL:“INSTEAD OF INSERT”触发器不会过时吗?
【发布时间】:2015-01-23 16:28:24
【问题描述】:

我在 Oracle PL/SQL 方面有一些经验,我现在正在学习 MS SQL。 我遇到了以下情况:

在表中插入时,要自动插入到 columnA 中的值必须被覆盖为 MAX(columnA) + 1

在 Oracle 中,我可以使用“插入前”触发器轻松完成此操作。

在 MS Sql 中,似乎应该通过“而不是插入”触发器来模拟之前。

我的问题是:比如说,我在“代替插入触发器”中编写了一个新的插入语句,其中包含此 columnA 的 max+1。

如果在以后某个时间点将一列添加到表中,我在触发器中的插入查询将不会有此列,除非有人记得更新触发器。

这是一个正确的假设吗?

有没有更好的方法来实现这一点?

编辑:假设此列中的数字可以任意调整。

【问题讨论】:

  • 为什么不是标识列,或者sequence
  • @tschmit007:我同意,但是假设该列也发生了其他操作。序列会“不同步”。据我所知,无法编辑身份列。我想继续使用触发器
  • 那么你测试添加新列了吗?

标签: tsql triggers insert


【解决方案1】:

显然,如果您有一个 INSERT INSTEAD OF 触发器:

插入表格 (列名) 价值观 (价值观)

然后你向表中添加一个新列,任何插入都会失败,因为插入而不是插入并没有提及所有列。

“列名或提供的值的数量与表定义不匹配。”

我认为如果新列允许空值,这不会发生,我的错误。

感谢@Blam 让我怀疑自己:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多