用例更新sql

问题描述 投票:0回答:1

我试图更新sql server表中用于生成ID的列:表结构是这样的

名称varchar(50),LastID长

在最后一个ID中,我们保留了我们为StudentID生成的Last ID。所以数据看起来像这样

Name :Student, LastID : 50001

最后一个ID递增1以生成(主键)的唯一ID。

现在有一种情况,我们必须在它到达Max(比如100000)时将此LastID重置为0。所以我正在使用

Update Sequence 
set    LastID = Case when LastID + @range >= @max then 0 else LastID end 
where  Name ='StudentID'

范围是我们传递给存储过程的参数,通常在我的情况下它是100。因此,在设置LastID之前,我会检查它是否超过学生ID的Max,即1,00,000。

在上面的更新查询中困扰我的是我再次将LastID更新为它的当前值,如果它没有超出范围。寻找更好的选择。我不想做的是:

使用select并将LastID保存在变量或类似的东西中。

如果可能的话,我只想在一次更新中做。

这是一个sql server 2008数据库,所以我不能使用sql server 2012的内置序列功能。

如果需要更多信息,请告诉我。

sql sql-server sql-update
1个回答
0
投票

如果你真的想用你的sql代码,你可以尝试

Update Sequence 
set    LastID = Case when LastID + @range >= @max then 0 else LastID end 
FROM Sequence
where  Name ='StudentID'

有关如何使用此语法的更多信息,请参阅How do I UPDATE from a SELECT in SQL Server?

此外,我不建议在您的情况下使用不同的方法,因为您不希望在LastID不符合条件时更新值,因此cf_en建议在where子句中过滤这些值,然后仅更新其余值

Update Sequence 
set    LastID = 0
FROM Sequence
where  Name ='StudentID' and LastID + @range >= @max

此查询将更快,因为它不会更新db中具有相同值的所有行

© www.soinside.com 2019 - 2024. All rights reserved.