【问题标题】:SQL: No Identity feature workaround using triggersSQL:没有使用触发器的身份功能解决方法
【发布时间】:2009-05-29 02:33:53
【问题描述】:

我对我的触发器有点生疏了,我正在尝试为一个班级找出这个问题:

在数据库 TEST 中,表没有 IDENTITY 功能选项。换句话说,当我们在“Users”表中插入一行时,我们希望主键“UserID”自动递增。请建议一种解决方法来实现此功能而无需此类内置功能。 (提示:您仍然可以使用函数、存储过程、序列、触发器等)

【问题讨论】:

  • 添加作业标签怎么样?

标签: sql sql-server stored-procedures triggers identity-insert


【解决方案1】:

对名为 ID 的表主键使用 Int 列。

然后您可以使用代替插入触发器来填充/计算要为 ID 插入的值。

触发器将确定相关表的最大现有 ID(使用从 TableA 中选择 MAX ID),然后为要插入的每条记录将其递增 1。

如果表中没有记录,则 ID 值为 1。

【讨论】:

  • 这里要注意,你这里的事务隔离模式很关键!如果您使用的是普通的 READ COMMITTED 隔离级别,则两个进程可能会生成相同的 ID,这确实是一件坏事。因此,您需要在触发器内使用 SERIALIZABLE 隔离级别,否则您可能会遇到麻烦。或者更好的是,完全避免它并使用 IDENTITY ;-)
【解决方案2】:

您使用序列,这在 Oracle 中很常见,它没有(或者没有一次,它可能已经更改)具有标识列。既然这是作业,我会让你从这里弄清楚其余的。

【讨论】:

    猜你喜欢
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    相关资源
    最近更新 更多