触发增加一列较高等级的等级时发现重复

触发增加一列较高等级的等级时发现重复

问题描述:

以下设置:触发增加一列较高等级的等级时发现重复

  • 我有2列可口可乐(数据类型为varchar)和COLB (数据类型INT)表
  • COLB被称为“等级”,这应该是唯一的(即1,2,3),不一定有序

挑战:

如果用户将插入一个新的行(或更新电子xisting)并且分配新的(尚未存在的)等级(例如, 4)=>没问题。但是:在这种情况下,如果用户将插入一个已经存在(例如2)=>的新行(或更新一个已存在的行),那么触发器应该将所有等级增加1(即2和3)。因此,2变成3,和3个变为4

CREATE TABLE Test (
colA varchar(5), 
colB int 
) 

INSERT INTO Test 
VALUES 
('Row1', 1), 
('Row2', 2), 
('Row3', 3) 

然后

INSERT INTO Test 
Values 
('Row4', 2) 

应带来以下结果:

Row1 => 1 
Row2 => 3 
Row3 => 4 
Row4 => 2 

挑战2:做什么,如果队伍有差距,即

Row1 => 1 
Row2 => 2 
Row3 => 4 

现在,当我想插入一个新行(例如Row4,2)表应该看起来像这样:

Row1 => 1 
Row2 => 3 
Row3 => 4 
Row4 => 2 

任何想法?我什至不现在如何处理这...

终于找到了一些......你怎么看待这个?改进建议?

--Create Table Test 
create table Test (colA varchar(5), colB int) 

insert into test 
values 
('Row1', 1), 
('Row2', 3), 
('Row3', 2), 
('Row4', 5), 
('Row5', 4) 

--Create Trigger 
Create TRIGGER [dbo].[tr_rank_insert] 
ON [dbo].[Test] 
AFTER Insert 
AS 

DECLARE 
    @newColA varchar(10), 
    @newColB int, 
SET @newColA = (Select colA from inserted) 
SET @newColB = (Select colB from inserted) 

DECLARE @rankid int 
DECLARE rank_cursor CURSOR FOR 
    SELECT colB 
    FROM Test 
    ORDER by colB asc 

OPEN rank_cursor 
FETCH NEXT FROM rank_cursor INTO @rankid 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    IF (@rankid < @newColB) 
     FETCH NEXT FROM rank_cursor INTO @rankid 

    ELSE 
     BEGIN 
      UPDATE Test 
      SET ColB = ColB + 1 
      WHERE ColA <> @newColA and ColB >= @newColB 

     BREAK 

    END 

    FETCH NEXT FROM rank_cursor INTO @rankid 

END 

CLOSE rank_cursor 
DEALLOCATE rank_cursor 

--Test 
INSERT INTO Test Values ('Row6', 2) 
INSERT INTO Test Values ('Row7', 5)