现在插入查询导致其他查询不再起作用

时间:2010-07-23 11:04:54

标签: sql sql-server

我在SQL Server数据库上运行了这个查询:

begin transaction;
insert into [db].[a].[Table1] ( [IsDeleted], [itemId], [regionId], [deskId], [LastUpdated], [LastUpdatedby])
select  [IsDeleted], [itemId], [regionId], 11, [LastUpdated], [LastUpdatedby]
from [db].[a].[Table1]
where deskId = 12;

update [db].[a].[Table1]
set deskId = 3
where deskId = 12;
commit transaction;

有些记录应该已经改变但是它说(O行受影响)。

我现在去做一个:

Select * from [db].[a].[Table1]

现在只需几分钟就可以使用“执行查询”旋转,但站点没有结束。

  1. 是否有人发现我的第一个查询会导致某种类型的锁定问题。
  2. 此外,既然我处于这种状态,我该如何摆脱它呢?

2 个答案:

答案 0 :(得分:2)

第一个脚本是否仍在实际执行更新语句?如果是这样,那么当您选择尚未提交的行时,这是预期的。

如果没有并且它显然是空闲的,那么我认为你不能运行整个第一个脚本。无论如何,交易似乎仍然是开放的,需要回滚或承诺。

您可以通过运行select * from sys.dm_os_waiting_tasks并查看blocking_session_id来确认这一点,或者如果您使用的是SQL2000,则需要使用exec sp_who2

这是管理工作室吗?如果是这样,请转到带有insert语句的窗口(如果更新仍未进行),则根据需要运行rollbackcommit

如果您在SSMS中选择一些文本然后运行它将只执行所选文本。这可能解释了如何只运行部分脚本。

答案 1 :(得分:2)

如果您仍然更新第一个表,那么读取将不起作用;如果你停止查询(第一个),它将回滚,但这可能需要一些时间。

将选择更改为:

Select * from [db].[a].[Table1] WITH(NOLOCK)

它应该马上回来。

希望有所帮助