Sql 使用游标更新现有架构

Sql 使用游标更新现有架构,sql,sql-server,Sql,Sql Server,我正在尝试更改现有架构以添加新列 这是我的案子- Order列的值是int,如果我正在分组TemplateId,它应该表示UI上项目的顺序从1到COUNT(Id) 我看到了两种可能的解决方案-生成订单计算字段或使用光标更新它 哪一个更好?如果使用游标win进行更新- 我可以知道如何进行此类更新吗?我可以想到的一个方法是: 启动交易 插入除顺序之外的列 更新表格以设置订单值 如果一切正常,则提交事务,否则回滚 这样做不需要直接处理游标,而且操作在某种程度上是原子的,因为它包装在事务块中 更新本身可

我正在尝试更改现有架构以添加新列

这是我的案子-

Order
列的值是int,如果我正在分组
TemplateId
,它应该表示UI上项目的顺序从1到
COUNT(Id)

我看到了两种可能的解决方案-生成
订单
计算字段或使用光标更新它

哪一个更好?如果使用游标win进行更新-


我可以知道如何进行此类更新吗?

我可以想到的一个方法是:

  • 启动交易
  • 插入除顺序之外的列
  • 更新表格以设置订单值
  • 如果一切正常,则提交事务,否则回滚
  • 这样做不需要直接处理游标,而且操作在某种程度上是原子的,因为它包装在事务块中

    更新本身可以这样做:

    ;with ord as 
    (Select id, row_number() over (partition by templateid order by selectedfieldid) rn from yourtable)
    Update dbo.titlefields
    Set order = rn - 1 --ROW_NUMBER() starts at 1 but we want to start at 0
    From dbo.titlefields t inner join
    ord x on t.id = x.id
    

    请告知我是否正确理解了您的要求,如果没有,我将更新我的答案。

    订单栏的最终用途是什么?还显示订单的报告?不,订单是技术栏。它永远不会显示在UI或repost上这是实现它的方法,但我正在寻找一个解决方案,如何计算[订单]的值这里是我所拥有的-这里是我想要得到的-好的,我编辑了我的代码以满足您的要求。一定要让我知道结果。是的,就是这样。非常感谢。