Tel*_*ini 9 sql sql-server relational-database sql-server-2008
由于导入到名为CUSTOMERS的测试表时出错,我发现自己需要在SQL Server中切换两列的值.
我错误地将LASTNAME和FIRSTNAME的相应值导入相反的字段(即客户姓氏被导入名字,反之亦然).为了解决这个问题,我在SQL Server 2008 R2中运行了以下查询,当然不希望它工作:
UPDATE CUSTOMERS
SET LASTNAME=FIRSTNAME, FIRSTNAME=LASTNAME
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,它奏效了!我所拥有的有限的编程经验(高中,一些大学课程)总是遵循这样的范例:切换两个值需要存在第三个变量来"保持"其中一个初始值的值.换句话说,我预计必须运行以下查询:
UPDATE CUSTOMERS
SET SOMEOTHERFIELD = LASTNAME
SET LASTNAME = FIRSTNAME
SET FIRSTNAME = SOMEOTHERFIELD
Run Code Online (Sandbox Code Playgroud)
这种行为只出现在SQL Server 2008 R2中,还是代表了我缺少的关系理论的其他一些基本方面?
小智 5
这是因为更新的工作方式:
在set子句中构造一个伪表.通过将原始行中未提及的列中的值复制到新行来构建此表中的行.列一次全部分配.也就是说,工作单元是一行,而不是一次一列.最后一步是删除旧行并插入新行.在内部,更新是选择,删除,插入.
| 归档时间: |
|
| 查看次数: |
4590 次 |
| 最近记录: |