【发布时间】:2012-06-01 13:35:24
【问题描述】:
抱歉标题,可能不是很清楚。
我在脚本中有一些相互依赖的 SQL 查询。
该脚本使用插入数据的临时表(#temp_data 表)。
这是预期的输出:
___________________________________
| speed1 | speed2 | distance |
| 1 | NULL | 10 |
| 3 | NULL | 40 |
| 5 | NULL | 90 |
| NULL | 1 | 10 |
| NULL | 3 | 40 |
| NULL | 5 | 90 |
这是查询结构(我没有包含实际的查询,因为它太大了):
-- First group
queryForSpeed1
queryToUpdateDistanceBasedOnSpeed1
-- Second group
queryForSpeed2
queryToUpdateDistanceBasedOnSpeed2
如果我将第一组查询(queryForSpeed1 和 queryToUpdateDistanceBasedOnSpeed1)与第二组分开运行,那么我会得到预期的输出:只有 speed1 和 distance 列包含数据:
___________________________________
| speed1 | speed2 | distance |
| 1 | NULL | 10 |
| 3 | NULL | 40 |
| 5 | NULL | 90 |
| NULL | NULL | NULL |
| NULL | NULL | NULL |
| NULL | NULL | NULL |
当我运行第二组时也会发生同样的情况:
___________________________________
| speed1 | speed2 | distance |
| NULL | NULL | NULL |
| NULL | NULL | NULL |
| NULL | NULL | NULL |
| NULL | 1 | 10 |
| NULL | 2 | 40 |
| NULL | 3 | 90 |
但是,当我运行两组时:所有距离都是NULL:
___________________________________
| speed1 | speed2 | distance |
| 1 | NULL | NULL |
| 3 | NULL | NULL |
| 5 | NULL | NULL |
| NULL | 1 | NULL |
| NULL | 2 | NULL |
| NULL | 3 | NULL |
我相信这在某种程度上与事务管理和临时表有关,尽管我无法在 Google 上找到解决问题的相关内容。
根据我的阅读,SQL Server 会保留一个事务日志,其中存储每个更新、插入和其他内容...当它到达脚本末尾时,它实际上会执行所有这些插入和更新。
因此,我对距离列所做的更新发现所有速度都为 NULL,因为数据尚未从先前的更新中插入到临时表中,但在查询结束时,速度已插入表中所以这就是它们可见的原因。
我玩了一下 GO statement 来批量执行我的脚本,但到目前为止没有运气......
我做错了什么?请有人指出我正确的方向吗?
编辑
这里是actual query。
【问题讨论】:
-
如果我们不知道您在做什么,我们无法回答您做错了什么
-
我不认为这是交易。我认为这是您的查询。如果要归咎于交易,您可能甚至没有
speed1和speed2中的值(尽管这取决于您的查询,所以我们仍然需要查看它们)。 -
我把查询放在问题的最后...
标签: sql sql-server tsql transactions