加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 如何自动递增列而不使用IDENTITY?

发布时间:2020-12-12 08:40:37 所属栏目:MsSql教程 来源:网络整理
导读:我正在创建一个有两列的表,我想自动递增.一列是主键,所以我在其上使用IDENTITY关键字.另一列将用于跟踪表中项目的用户定义的“排序顺序”.任何时候,用户移动一个项目,它的“排序顺序”将与另一个元素的值交换值.但是,当一个项目插入到表中时,插入的项目应始终
我正在创建一个有两列的表,我想自动递增.一列是主键,所以我在其上使用IDENTITY关键字.另一列将用于跟踪表中项目的用户定义的“排序顺序”.任何时候,用户移动一个项目,它的“排序顺序”将与另一个元素的值交换值.但是,当一个项目插入到表中时,插入的项目应始终自动分配比表中任何其他值高的排序顺序值.以下是表创建脚本的简化版本:
CREATE TABLE [AnswerRow] (
    [AnswerRowId] [int] IDENTITY(1,1) NOT NULL,[SortOrder] [int] NOT NULL,[IsDeleted] [bit] NOT NULL CONSTRAINT [DF_AnswerRow_IsDeleted] DEFAULT 0,CONSTRAINT [PK_AnswerRow] PRIMARY KEY CLUSTERED ([AnswerRowId] asc)
)

使SortOrder列自动递增的最佳方法是与AnswerRowId列相同(但是以后仍然可以修改排序顺序值)?

解决方法

我不知道这是什么@Stephen Wrighton想到的,但是我认为你可以使用一个插入触发器来使用为AnswerRowId生成的IDENTITY值:
CREATE TRIGGER [dbo].[AnswerRowInsertTrigger]
   ON  [dbo].[AnswerRow]
   AFTER INSERT
AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    UPDATE a SET a.SortOrder = a.AnswerRowId
    FROM AnswerRow a JOIN inserted i ON a.AnswerRowId = i.AnswerRowId

END

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读