SQL:没有使用触发器的标识功能解决方案

SQL:没有使用触发器的标识功能解决方案,sql,sql-server,stored-procedures,triggers,identity-insert,Sql,Sql Server,Stored Procedures,Triggers,Identity Insert,我对我的触发器有点生疏了,我正在尝试为一个类解决这个问题: 在数据库测试中,表没有标识功能的选项。换句话说,当我们在表“Users”中插入一行时,我们希望主键“UserID”自动递增。请建议一种解决方案,以便在没有此类内置功能的情况下实现此功能。 (提示:您可能仍在使用函数、存储过程、序列、触发器等)您使用序列,这在Oracle中非常常见,Oracle没有(或者一次也没有,它可能已经更改)标识列。由于这是家庭作业,我将让您从这里了解其余部分。您使用序列,这在Oracle中非常常见,它没有(或者没

我对我的触发器有点生疏了,我正在尝试为一个类解决这个问题:

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

您使用序列,这在Oracle中非常常见,Oracle没有(或者一次也没有,它可能已经更改)标识列。由于这是家庭作业,我将让您从这里了解其余部分。

您使用序列,这在Oracle中非常常见,它没有(或者没有一次,它可能已经更改)标识列。由于这是家庭作业,我将让您从这里了解其余内容。

使用Int列作为名为ID的表主键

然后可以使用instead of Insert触发器来填充/计算要为ID插入的值

触发器将确定所讨论的表的最大现有ID(使用select MAX ID from TableA),然后为每个要插入的记录将其递增1


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

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

然后可以使用instead of Insert触发器来填充/计算要为ID插入的值

触发器将确定所讨论的表的最大现有ID(使用select MAX ID from TableA),然后为每个要插入的记录将其递增1


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

添加家庭作业标记如何?添加家庭作业标记如何?请务必注意,此处的事务隔离模式至关重要!如果您使用的是正常的读提交隔离级别,那么两个进程可能会生成相同的ID,这确实是一件坏事。因此,您需要在触发器中使用可序列化的隔离级别,否则可能会遇到麻烦。或者更好的办法是,完全避免使用标识;-)这里需要注意的是,这里的事务隔离模式非常重要!如果您使用的是正常的读提交隔离级别,那么两个进程可能会生成相同的ID,这确实是一件坏事。因此,您需要在触发器中使用可序列化的隔离级别,否则可能会遇到麻烦。或者更好的办法是,完全避免使用标识;-)