抱歉标题,可能不是很清楚。
我在脚本中有一些相互依赖的 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 语句来批量执行我的脚本,但到目前为止还没有运气......
我究竟做错了什么?有人可以指出我正确的方向吗?
编辑
这是实际的查询。