SQL逐行更新

SQL逐行更新,sql,cursor,sql-update,Sql,Cursor,Sql Update,我的SQL表有两个字段影响我的问题:优先级为real,起始日期为datetime。当用户向表中添加项目时,她指定给定开始日期的优先级 如果项目1是优先级1,那么项目2可能是优先级2,并且将在项目1之后给出开始日期 但如果项目2的优先级为0.5或任何小于项目1优先级的数字,则其开始日期将早于项目1的开始日期 在添加每个项目之后,我希望遍历项目列表并更新所有优先级,使其成为整数,从优先级为1的最早开始日期开始,然后是2、3等 我正在使用SQL2005。我知道我可以用光标来做这件事。有更好的办法吗?怎

我的SQL表有两个字段影响我的问题:优先级为real,起始日期为datetime。当用户向表中添加项目时,她指定给定开始日期的优先级

如果项目1是优先级1,那么项目2可能是优先级2,并且将在项目1之后给出开始日期

但如果项目2的优先级为0.5或任何小于项目1优先级的数字,则其开始日期将早于项目1的开始日期

在添加每个项目之后,我希望遍历项目列表并更新所有优先级,使其成为整数,从优先级为1的最早开始日期开始,然后是2、3等

我正在使用SQL2005。我知道我可以用光标来做这件事。有更好的办法吗?怎么会这样


谢谢。

您可以使用临时表来完成此操作。也许有更好的办法,但我现在想不出一个。这还假设您的表上有一个主键——如果它只是开始日期和优先级,那么这个解决方案就不可行了

create table #tempOrder (newPriority int identity,
                         id int)

insert into #tempOrder (id) select id from table order by Start_Date

update table set priority = newPriority 
  from #tempOrder
  where #tempOrder.id = table.id

关于你的问题,有一件事我不明白,那就是提到了0.5的优先级。您提到优先级是按照开始日期的顺序分配的,但也提到手动将优先级设置为0.5。什么时候会发生这种情况?如果该优先级的开始日期与按开始日期排序的优先级冲突,该行为应该是什么?

如果所有的开始日期时间都是唯一的,请在开始时间内尝试此操作,以便您可以查看结果并在不需要时回滚

UPDATE mt
SET Priority = 
    (
     SELECT COUNT(*) 
     FROM MyTable mt2 
     WHERE mt2.Start_Date <= mt.Start_Date
    )
FROM MyTable mt
   Update Table Set 
     Priority = (Select Count(*) From table 
                 Where Start_Date <= T.Start_Date)
   From Table T
   Where Start_Date > getDate()

如果它们不是唯一的,您将得到一些具有相同优先级的行,其中日期时间相同,并且优先级序列中存在一些间隙

插入一个新项,其优先级大于所有早于它的项,小于所有大于它的项。因此,用户可能会指定优先级为3.5,然后将该项插入表中,使最高优先级小于3.5的项的开始日期=结束日期。如果没有优先级小于3.5的项目,则将为其分配尽可能早的开始日期。我将尝试您的解决方案,因为我现在看到有些项目具有相同的开始日期。具有相同开始日期的项目以相同的优先级开始,并应以相同的优先级结束。非常感谢。我会让你知道它是否能根据需要工作。进一步增强:被修改的项目必须都有今天的开始日期。是否在子查询中添加额外的where子句?例如:更新表格设置优先级=从表格中选择计数*,其中开始日期=从表格中获取日期t每个熔炉重新开始编号。我成功地为此添加了where子句。但是,如果两个或多个项目在更新之前具有相同的优先级,因此同时启动,则它们在更新之后必须具有相同的优先级。我该怎么做?到目前为止,我有:更新tblTable Set Priority=从tblTable中选择Count*,其中Start_Date=@截止日期和FURNER_Name=T.FURNER_Name来自表TDid it!更新tblTable Set Priority=从tblTable中选择Count*,其中开始日期=@CutoffDate和熔炉名称=T.furnary\u名称和优先级