【问题标题】:Progressive sql update statement渐进式sql更新语句
【发布时间】:2012-06-27 19:18:12
【问题描述】:

6我有两个表如下, 表:

MEMBER_ID   CLIENT_ID   TENTATIVE_ID    TENTATIVE_START_DATE
1   65239   26  6/15/2012
2   63693   NULL    NULL
3   5549    NULL    NULL
4   85452   NULL    NULL
5   77898   11  6/15/2012
6   93119   21  6/15/2012
7   7876    26  6/20/2012
8   27572   26  6/21/2012
9   15524   26  6/21/2012
10  39465   8   6/21/2012
11  10143   26  6/23/2012
12  72828   NULL    NULL

表 B:

TENTATIVE_ID    LAST_AUTO_ASSIGNED_ON
26  6/15/2012
11  6/16/2012
21  6/13/2012
27  6/20/2012
28  6/22/2012
29  6/25/2012
8   6/26/2012
21  6/24/2012

情况是,我需要根据最小 LAST_AUTO_ASSIGNED_ON 值使用表 B 中的 TENTATIVE_ID 更新表 A 中的空值,并且每次分配 id 时,都会使用表 B 中该 id 的当前日期时间更新 LAST_AUTO_ASSIGNED_ON。

通过这种方式,我们循环遍历表 B 中的所有暂定 id,并将它们分配给表 A。

我不允许使用光标。我怎样才能做到这一点?

谢谢!

【问题讨论】:

  • tableb 中有两行数据完全相同。不可能只更新其中一个的日期。是否缺少字段?
  • 另外,如果您选择最小最后一次自动分配的日期,在具有相同最小日期的多个 id 之间确定的标准是什么?
  • 另外,你没有提到暂定开始日期,必须指定吗?
  • 我已经更新了表格。表 B 没有重复。暂定开始日期将设置为 getdate()。

标签: tsql progressive


【解决方案1】:

更新表格a set tablea.tentative_id = (select top 1 tableb.tentative_id from tableb order by Last_auto_assigned_on, tentative_id), Tentative_start_date = getdate() 从表 其中 tablea.tentative_id 为空

更新表格b 设置 last_auto_assigned_on = getdate() where tentative_id = (select top 1 tableb.tentative_id from tableb order by Last_auto_assigned_on, tentative_id)

【讨论】:

  • 这必须在我们运行查询时动态完成。所以对于每个插入,我们需要通过最小 Last_auto_assigned_on 日期从表 B 订单中获取最新的 top id。
  • 哪个查询?您之前没有提到任何插入。
  • 使用 while 存在循环来检查空值。在 while 代码块中,使用 top 1 获取所需的 id 并排序。将该 id 更新为 tablea,其中 null 和 id 是嵌套选择中的最小值。然后更新表 b。到此结束 while 代码块。
  • 澄清一下:你是从tableb获取id,tablea的更新应该是“where Memberid = (select top 1 memberid where tentativeid is null order by memberid)”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-05
  • 2014-08-06
  • 2016-03-25
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多