目前我尝试使用UPDATE语句更新本地变量,同时还尝试在变量达到某个值时取消UPDATE语句:
UPDATE table
SET @var = @var + 1,
field = @var
WHERE @var < 10
遗憾的是,这不起作用,因为它运行所有记录而不是10个。有没有人知道如何在不使用循环的情况下优雅地解决这个问题? 谢谢!
编辑: 我试图做的就是为派对分配某种投票。说派对获得总票数的36.47%。所以我计算了这个派对的比率为.47%(整数部分的削减)。现在我按比例DESC订购我的结果表,只要剩下投票,就给每一方加一票。剩余的投票存储在变量中。这过于简单,但我希望你能得到我想做的事。
答案 0 :(得分:4)
您可以使用ROW_NUMBER()
来实现您尝试做的事情。这是一个基本的例子:
declare @t table (field int not null, Ord int not null)
insert into @t(field,Ord) values (0,1),(0,2),(0,3),(0,4),(0,5)
;With Numbered as (
select
*,
ROW_NUMBER() OVER (ORDER BY Ord) as rn
from
@t
)
update Numbered
set field = rn
where rn < 4
select * from @t
结果:
field Ord
----------- -----------
1 1
2 2
3 3
0 4
0 5
这里,行号是在CTE内生成的,并使用适当的列来明确定义排序(因为您的编辑建议您有类似的可用内容)。我们还可以利用您可以针对CTE而不是基表编写UPDATE
(前提是UPDATE
显然只尝试更新单个表)