是否基于SQLServer2005中的另一列自动递增一列?

是否基于SQLServer2005中的另一列自动递增一列?,sql,triggers,primary-key,auto-increment,Sql,Triggers,Primary Key,Auto Increment,我在一个表中有两个主键列。第二列基于第一列。我向您展示了它们的数字,请看splr\U Slno是基于splr\U Id的 我为您展示另一个示例图 当我删除splr_Id“21”和splr_Slno“2”的记录时,应该是这样的 下面是一个触发器 ALTER TRIGGER [dbo].[trigger_i] ON [dbo].[table] AFTER DELETE AS BEGIN SET NOCOUNT ON; --Declarations declare @i

我在一个表中有两个主键列。第二列基于第一列。我向您展示了它们的数字,请看splr\U Slno是基于splr\U Id的

我为您展示另一个示例图

当我删除splr_Id“21”和splr_Slno“2”的记录时,应该是这样的

下面是一个触发器

 ALTER TRIGGER [dbo].[trigger_i] 
 ON  [dbo].[table] 
 AFTER DELETE
 AS 
 BEGIN
SET NOCOUNT ON;
--Declarations
    declare @intSplrlid as int
    declare @autoSplrslno as int
    set @autoSplrslno=0
--Process
    set @intSplrlid = (select splr_Id from deleted)
    --set @autoSplrslno = (select splr_Slno from deleted)
    update dbo.table set splr_Slno = @autoSplrslno+1 where dbo.table.splr_Id =@intSplrlid;
结束


第二条记录被删除了…,我想要的是当记录被删除时,splr\U Slno应该自动生成。我认为下面的代码应该可以工作。在不同的场景中尝试。我刚刚实现了逻辑。没有测试它。如果有什么错误,请告诉我

ALTER TRIGGER [dbo].[trigger1] 
ON  [dbo].[table1] 
AFTER DELETE
AS 
BEGIN
    DECLARE @splr_Id INT, @increment INT = 1, @iterate_splr_Id int, @iterate_splr_Slno int
    SELECT @splr_Id = splr_Id FROM DELETED

    DECLARE cursorObj CURSOR LOCAL static FOR SELECT splr_Slno, splr_Id FROM dbo.table1 WHERE splr_Id = @splr_Id
    OPEN cursorObj
    FETCH NEXT FROM cursorObj into @iterate_splr_Slno, @iterate_splr_Id
    WHILE @@FETCH_STATUS = 0
    BEGIN
      UPDATE dbo.table1 SET splr_Slno = @increment WHERE splr_Id =@iterate_splr_Id and splr_Slno = @iterate_splr_Slno
      SET @increment = @increment + 1
    FETCH NEXT FROM cursorObj into @iterate_splr_Slno, @iterate_splr_Id
    END
    CLOSE cursorObj
    DEALLOCATE cursorObj
END

为什么要这样做?当删除2时,您希望将Slno的顺序设置为1 2 3 4。我的意思是你想重新安排序列?一种方法是通过循环生成游标并更新行。因为我想从用户推荐的前端删除记录。我希望在删除记录时自动生成splr_Slno。您是否使用存储过程进行删除?如果是,请告诉我。因此,我可以在SP中生成代码。或者,如果您需要Trigger,我将在Trigger.no中生成代码,方法是使用此查询“delete dbo.table where splr_Id=21和splr_Slno=2”,我正在使用一个触发器进行自动递增,但它显示了一个错误我正在更新我的问题抱歉,我仅在while循环计划中使用了它,但我不需要,而且我忘了删除它。我已经更新了我的答案。你能解释一下怎么了吗?是我的逻辑错误还是我的代码有问题?还是别的?让我们