【问题标题】:Update records matched and unmatched?更新匹配和不匹配的记录?
【发布时间】:2018-09-26 09:16:39
【问题描述】:

我有一个 TSQL 存储过程,它对必须匹配某些条件的表执行 UPDATE。这会将“ProcessDate”更新为 GETDATE()。但是,所有不匹配的数据永远不会更新此 ProcessDate(因为没有匹配,它保持为 NULL)。有没有办法同时更新不匹配的记录上的 ProcessDate ?我当前的解决方案是在第一个运行后简单地添加一个额外的 UPDATE 语句以返回并将所有 ProcessDate = NULL 更新为 GETDATE(),但不确定是否有更好的方法来执行此操作?谢谢。

【问题讨论】:

  • 为什么不直接将您的加入更改为ON target.key = src.key OR target.ProcessDate IS NULL
  • 我想你需要提供一些数据来说明你的意思。我读了你的帖子至少 3 次,但仍然不明白你的意思,因为对我来说,你的所有记录可以分为两类,1. 匹配的记录 2. 不匹配的记录,并且你想更新两者中的记录类别,那么为什么不直接更新所有记录而不使用任何 where 子句呢?这里一定有问题
  • 如果您从这里开始How to post a T-SQL question on a public forum,您将获得更多有用的信息,以便我们有更多的工作要做。

标签: sql-server tsql


【解决方案1】:

听起来您可以使用 MERGE,其中一个部分用于“匹配”,一个部分用于“不匹配”。您可以控制哪个 UPDATE 适用于哪种情况。如果您提供到目前为止的查询,如果需要,我可以帮助创建 MERGE。

【讨论】:

    【解决方案2】:

    您可以使用case 并将您的选择标准从where 部分移到那里:

    update t set ProcessDate = case
        when <MyCriteriaMet> then getdate()
        else @MyOtherValue
    end
    from dbo.MyTable t;
    

    【讨论】:

      猜你喜欢
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      相关资源
      最近更新 更多