使用游标更新现有架构

时间:2014-03-19 11:17:02

标签: sql sql-server

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

以下是我的案例 - http://sqlfiddle.com/#!3/06c58/1

Order列的值为int,如果我正在对COUNT(Id)进行分组,则该值应表示UI上从1到TemplateId的项目顺序。

我看到2个可能的解决方案 - 使Order计算字段或使用Cursor更新它。

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

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

1 个答案:

答案 0 :(得分:1)

我能想到的一个方法是:

  1. 开始交易
  2. 插入除订单
  3. 之外的列
  4. 更新表格以设置订单值
  5. 如果一切正常,则提交事务,否则回滚。
  6. 你不需要直接处理游标来执行此操作,并且操作将以某种方式处于原子状态,因为它包含在事务块中。

    更新本身可以这样做:

    ;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
    

    如果我已正确理解您的要求,请告诉我,如果不是这样,我会更新我的答案。