0

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

4

1 回答 1

0

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

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
于 2013-05-23T06:25:22.707 回答