【问题标题】:Auto Increament a column based on Another column in Sql server 2005?根据 Sql server 2005 中的另一列自动增加一列?
【发布时间】:2013-05-18 08:56:19
【问题描述】:

我在一个表中有两个主键列。第二列基于第一列。我给你看他们的数字,看 splr_Slno 是基于 splr_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_Slno 应该在记录被删除时自动生成

【问题讨论】:

  • 为什么要这样做?当删除 2 时,您希望 splr_Slno 像 1 2 3 4 一样有序。我的意思是你想重新排列顺序?一种方法是通过循环迭代来创建游标并更新行。
  • 因为我想从用户推荐的前端删除记录。我希望删除记录时自动生成 splr_Slno
  • 您是否使用存储过程进行删除?如果是,请告诉我。所以我可以在SP中编写代码。或者如果你想要触发器,我会在触发器中编写代码。
  • 否,使用此查询“delete dbo.table where splr_Id=21 and splr_Slno=2”
  • 我正在使用自动增量触发器,但它显示错误我正在更新我的问题

标签: sql triggers primary-key auto-increment


【解决方案1】:

我认为下面的代码应该可以工作。在不同的场景中尝试。我刚刚实现了逻辑。没有测试它。如有错误请告诉我。

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

【讨论】:

  • 对不起,我只使用了 while 循环的计划,但我不需要,我忘记删除了。我已经更新了我的答案。
  • 你能解释一下出了什么问题吗?是我的逻辑错误还是我的代码有问题?还是别的什么?
猜你喜欢
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 2014-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多