这个查询如何交换tab1的col1和col2的数据? 基本上交换我们需要临时变量,但在这里我们不是。那么sql server如何做到这一点?update tab1 set col1 = col2,col2 = col1
1
A
回答
4
只是:
UPDATE tabl
SET col1 = col2,
col2 = col1
没有DML
查询看到它的结果,以避免Halloween problem。
在内部,UPDATE
锁被放置在记录(或数据页)上,旧的值被读取并存储到临时变量,那么锁升级为EXCLUSIVE
和新值(存储在临时变量)是写入适当的专栏。
0
我的笔记信用乔·塞科:
在<set clause list>
每个任务并行执行和 每组第一次更改所有符合条件的行。或者至少是 这是理论模型。在实践中,实现将首先使用WHERE 子句在一次传递中标记表中的所有限定行。如果没有问题,那么SQL引擎会在工作存储中为每个标记行创建一个 的副本。每个SET子句在旧行图像上基于 执行,结果放入新行图像。 最后,删除旧行并插入新行。如果在所有这些过程中发生了一个 错误,则系统执行ROLLBACK,表 保持不变并报告错误。这种并行性不是 ,就像你在传统的第三代编程 语言中找到的一样,所以它可能很难学习。此功能可让你写一个 语句,将在两列交换价值,即:
UPDATE MyTable
SET a = b, b = a;
这是不一样的东西
BEGIN ATOMIC
UPDATE MyTable
SET a = b;
UPDATE MyTable
SET b = a;
END;
在第一次更新,列A和B交换每行中的值。在 第二对UPDATE中,列a将在每一行中获得列b的所有值 。在该对的第二个UPDATE中,a(现在为 与b的原始值具有相同的值)将被写回 列b - 完全不变。对于值表达式可以有什么限制。同一列在<set clause list>
中不能出现超过一次 - 这是合理的,因为该语句的并行性 。既然两者都同时生效,你就不知道使用哪个SET子句。
相关问题
- 1. SQL服务器:UPDATE SET MyTable的COL1 =值,COL2 = COL1
- 2. Propel ORM - SELECT ... WHERE col1 = col2
- 3. SELECT * FROM table WHERE col1 <= col2?
- 4. 从col1中减去col2
- 5. SQL选择不同的COL1,其中COL2是_且COL2从不_ _?
- 6. Rails使用col2更新属性表col1
- 7. 动态列col1 col2 col3 col3 col4
- 8. “使用实体框架排序Col1,Col2”
- 9. 如何在Derby中模拟UPDATE x SET(col1,col2)=(SELECT a,b FROM y)?
- 10. 减去两列(Col1中-col2的),并添加剩余下一行Col1中
- 11. QueryDSL如何写“哪里?col1和col2之间”
- 12. CASE在其中具有Col1中<> col2的
- 13. SQL选择其中col1或col2等于变量的行
- 14. 什么是Django的ORM等价于SELECT col1 FROM table WHERE col2 = somestring?
- 15. 的Sql计数行两列,其中的col1一样COL2
- 16. 为什么SQL标准不允许COUNT(col1,col2,...,colN)
- 17. 名称为SELECT * FROM(VALUES(X,Y))AS TableLiteral(Col1中,col2的)
- 18. 使用lubridate获取R中数据帧的时间差col2-col1?
- 19. 无法获得与COL1的独特记录和COL2排序
- 20. mysql从col1中选择不同的行WHERE col2 = x
- 21. SQL选择其中col1和col2与不同col3值相同组合的行
- 22. SQL查询 - 从视图中选择*或从视图中选择col1,col2,... colN
- 23. 查询从GraphQL到Sequelize.js SELECT ... WHERE COL1 = X和(COL2像Y或COL3像Y)
- 24. 如何将数据框中的两列转换为scala中的Map(col1,col2)?
- 25. SQL Server:选择col1 + col2不止一次存在的所有重复行
- 26. SQL Query select col1,col2,if col3 ='xx'then'yy'else col3,col4 col5 ???它是可行的吗?
- 27. 如果col1值退出两次且col2不为空,则选择行
- 28. MySQL的加入 - 选择COL1 COL2地方在其他表(过滤)山口匹配
- 29. MySQL的插入,除非col1和col2上都相同,则更新另一列
- 30. 如何获取SUM(COL2)为somename(COL2 * COL3)/总和(COL2)作为somename1的一些日期
整齐!我从来不知道你可以指望这... – 2010-10-27 10:08:00
只是出于兴趣,你知道这是否工作,即使隔离级别设置为未读提交? – 2010-10-27 10:27:28
@保罗:是的。尽管有'READ UNCOMMITED',DML查询仍然会放置锁。 – Quassnoi 2010-10-27 10:40:27