触发增加一列较高等级的等级时发现重复
问题描述:
以下设置:触发增加一列较高等级的等级时发现重复
- 我有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)