gpt4 book ai didi

sql - 在 SQL Server 中的两列之间交换数据是如何工作的?

转载 作者:行者123 更新时间:2023-12-04 21:06:59 28 4
gpt4 key购买 nike

我可以用谷歌搜索这个,但它看起来很古怪,值得在 SA 上作为答案登录。

所以在开发区,如果你想交换两个变量的值,你需要第三个临时变量。

例如

string x = "ABC";
string y = "DEF";

string temp;

temp = x;
x = y;
y = temp;

但是在 SQL 更新中,您可以简单地说

UPDATE table
SET ColumnA = ColumnB, ColumnB = ColumnA

这在后台是如何工作的

  • SQL Server 是否首先对整行进行快照?
  • SQL Server 是否会一次性对正在更新的所有行进行快照?
  • 优化器是否意识到它正在进行列交换,并在后台创建一个临时变量?

干杯 EoinC

最佳答案

SQL Server 是否首先对整行进行快照?

在某种程度上,是的。

这是一个有趣的场景,突出了声明式代码和过程式代码之间的区别。让我们举个例子:

UPDATE 
users
SET
first_name = last_name,
last_name = first_name,
age = 55
WHERE
user_id = 100

UPDATE 语句的工作方式有点像这样:

  • 首先它检查 WHERE 子句。所有与 WHERE 子句匹配的行都将被标记为子集。如果没有 WHERE 子句,那么整个表都会被标记。使用上面的例子,我们可以有一个像下面这样的子集:
    user_id  |  first_name  |  last_name  |  age  |  country    ---------+--------------+-------------+-------+---------    100      |  John        |  Doe        |  50   |  USA
  • 然后从 SET 子句构造一个新的子集。 SET 子句中未提及的字段是从原始子集中复制的。

    新子集中的age字段将被直接赋值为55first_namelast_name 字段也会发生同样的情况,但它们的新赋值值将从原始子集中检索。 country 字段是从原始子集中按原样复制的,因为 SET 子句中没有提到它。

    user_id  |  first_name  |  last_name  |  age  |  country    ---------+--------------+-------------+-------+---------    100      |  Doe         |  John       |  55   |  USA
  • 然后从表中删除原始子集并插入新子集。

关于sql - 在 SQL Server 中的两列之间交换数据是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2251303/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com