【问题标题】:where in sql server query update number list one field to another在 sql server 查询更新编号列表一个字段到另一个字段的位置
【发布时间】:2012-10-31 18:44:22
【问题描述】:

我正在使用 SQL Server,并且在下面的查询中,我有一个问题。当我在列表中执行 where 时,我不确定左侧的字段是否会与右侧的字段(来自同一个表)一起更新。

update loc 
set locShortName = locName 
where locid in (3,4,11,13,14,15,16,18,19,20,21,24,32,41,45,68,69,77,82,85)

update loc set locShortName = locName where locid = 3 (move to next record in the list)      
update loc set locShortName = locName where locid = 4 (move to next record in the list)
update loc set locShortName = locName where locid = 11(move to next record in the list)

等等……

我认为它会采用列表中的第一个数字并解决字段值设置,然后移动到列表中的下一个。

我的预期正确吗?

提前致谢。

【问题讨论】:

    标签: sql sql-server insert where-in


    【解决方案1】:

    这对我来说是正确的。每当我像这样编写一次性更新查询时,我总是先在表的副本上对其进行测试。

    【讨论】:

      【解决方案2】:
      update loc set locShortName = locName where locid in 
      (3,4,11,13,14,15,16,18,19,20,21,24,32,41,45,68,69,77,82,85)
      

      你可以认为它是这样工作的:

      排队。 如果 locid 在列表中,将获取该行的 locName 并将其放入 locShortName。

      换一排。 如果 locid 在列表中,将获取该行的 locName 并将其放入 locShortName。

      换一排。 如果 locid 不在列表中,它不会做任何事情。

      等等

      它不会一次处理一个,但概念结果会是这样的

      【讨论】:

        【解决方案3】:

        您的期望几乎是正确的,它不是一次处理一条记录,而是处理整组记录。它将提取 locid = ... 的记录,然后一举将 locShortname 字段更新为每条记录中的 locname 字段。在编写 SQl 代码时,永远不要考虑处理单个记录,而只考虑处理记录集。

        【讨论】:

          【解决方案4】:

          前两个答案没有错误,它将读取和更新单个隐式事务中的所有记录(以查询开始和结束)。查询的更新部分将映射同一记录中的“locShortName”和“locName”值。

          我发现了解将要更新的内容的最简单方法是编写更新查询,如下所示。完成后,我通常会删除副作用语法。

          --update l
          --set locShortName = locName 
          select locShortName = locName
          from loc as l
          where locid in (3,4,11,13,14,15,16,18,19,20,21,24,32,41,45,68,69,77,82,85);
          

          正如我所说,当您完成时,要么删除选择行并取消注释更新/设置行,要么删除副作用语法。如果您还想加入其他表,这种格式会很有用。

          只需确保每次更改 select 语句时,都对 update 语句进行相应的更改(即使已注释)。

          当您不确定查询的结果时,另一个好的做法是开始一个事务,以便您可以检查其产生的更改和行数。然后,您可以根据需要提交或回滚事务。我只是警告它会锁定这些行或表,因此不要在活动系统中停留太久。

          【讨论】:

            猜你喜欢
            • 2011-02-15
            • 1970-01-01
            • 1970-01-01
            • 2015-10-03
            • 1970-01-01
            • 2014-03-06
            • 2011-08-21
            • 1970-01-01
            • 2017-05-07
            相关资源
            最近更新 更多