sql修改排名表(事务)问题(可用C#实现)

小懒虫爱贪玩 2016-02-16 10:09:48
我现在SQL Server有一张名为Score的排名表,有name(名字),totalRank(总排名),categoryId(分类Id),categoryRank(分类排名)的列,其中每一条的totalRank和categoryRank都不允许重复,现在我要更改totalRank(总排名), categoryRank(分类排名),比如提升总排名或者降低总排名,对应分类排名也能自动按需修改,想用事务实现,请问应该怎么写呢?
我的思路是:
[totalRank]排名下降:
1.修改旧[totalRank]
2.找出 旧[totalRank]<=条目<=新[totalRank]-1,将[totalRank]-1
3.找出 旧[categoryRank]+1的条目,并拿它的[totalRank]与新[totalRank]比较
4.若它的[totalRank]<新[totalRank],则它的[categoryRank]-1,
当前条目的[categoryRank]+1,然后循环步骤3、4,否则跳出循环

[totalRank]排名上升:
1.修改旧[totalRank]
2.找出 新[totalRank]<=条目<=旧[totalRank]-1,将[totalRank]+1
3.找出 旧[categoryRank]-1的条目,并拿它的[totalRank]与新[totalRank]比较
4.若它的[totalRank]<新[totalRank],则它的[categoryRank]+1,
当前条目的[categoryRank]-1,然后循环步骤3、4,否则跳出循环
...全文
129 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ginnnnnnnn 2016-02-16
  • 打赏
  • 举报
回复
总排名的例子,分类排名一样处理,加上逻辑控制即可
CREATE TABLE #Tmp
(
 Name NVARCHAR(50),
 TotalRank INT,
 categoryID INT,
 categoryRank INT
)

INSERT INTO #Tmp
        ( Name ,
          TotalRank ,
          categoryID ,
          categoryRank
        )
VALUES  ( N'AAA' ,  1 , 1 , 1 ),
		( N'BBB' ,  2 , 1 , 2 ),
		( N'CCC' ,  3 , 1 , 3 ),
		( N'DDD' ,  4 , 1 , 4 ),
		( N'EEE' ,  5 , 2 , 1 ),
		( N'FFF' ,  6 , 2 , 2 ),
		( N'GGG' ,  7 , 2 , 3 )		

DECLARE @Name NVARCHAR(50) = 'BBB',
		@NewTotalRank INT = 4,
		@CurrentTotalRank INT

SELECT @CurrentTotalRank = TotalRank
	FROM #Tmp
		WHERE Name = @Name
SELECT @CurrentTotalRank,@NewTotalRank
IF @CurrentTotalRank > @NewTotalRank --排名升了
	UPDATE #Tmp SET TotalRank = TotalRank + 1
		WHERE TotalRank >= @NewTotalRank AND TotalRank < @CurrentTotalRank
ELSE --排名降了
	UPDATE #Tmp SET TotalRank = TotalRank - 1
		WHERE TotalRank > @CurrentTotalRank AND TotalRank <= @NewTotalRank

UPDATE #Tmp SET TotalRank = @NewTotalRank
	WHERE Name = @Name


	
	
小懒虫爱贪玩 2016-02-16
  • 打赏
  • 举报
回复
引用 1 楼 KanzakiOrange 的回复:
总排名的例子,分类排名一样处理,加上逻辑控制即可
CREATE TABLE #Tmp
(
 Name NVARCHAR(50),
 TotalRank INT,
 categoryID INT,
 categoryRank INT
)

INSERT INTO #Tmp
        ( Name ,
          TotalRank ,
          categoryID ,
          categoryRank
        )
VALUES  ( N'AAA' ,  1 , 1 , 1 ),
		( N'BBB' ,  2 , 1 , 2 ),
		( N'CCC' ,  3 , 1 , 3 ),
		( N'DDD' ,  4 , 1 , 4 ),
		( N'EEE' ,  5 , 2 , 1 ),
		( N'FFF' ,  6 , 2 , 2 ),
		( N'GGG' ,  7 , 2 , 3 )		

DECLARE @Name NVARCHAR(50) = 'BBB',
		@NewTotalRank INT = 4,
		@CurrentTotalRank INT

SELECT @CurrentTotalRank = TotalRank
	FROM #Tmp
		WHERE Name = @Name
SELECT @CurrentTotalRank,@NewTotalRank
IF @CurrentTotalRank > @NewTotalRank --排名升了
	UPDATE #Tmp SET TotalRank = TotalRank + 1
		WHERE TotalRank >= @NewTotalRank AND TotalRank < @CurrentTotalRank
ELSE --排名降了
	UPDATE #Tmp SET TotalRank = TotalRank - 1
		WHERE TotalRank > @CurrentTotalRank AND TotalRank <= @NewTotalRank

UPDATE #Tmp SET TotalRank = @NewTotalRank
	WHERE Name = @Name


	
	
解决了,谢谢你!

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧