2010-07-23 73 views
0

我跑我的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; 

存在應已改變的記錄,但它說(影響Ò行)。

我現在就做:

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

其只是「執行查詢」幾分鐘現在在現場沒有結束紡紗。

  1. 有沒有人看到我的第一個查詢會導致某些類型的鎖定問題的任何錯誤。
  2. 此外,現在我處於這種狀態,我該如何擺脫它?

回答

2

第一個腳本還在實際執行更新語句嗎?如果是這樣,那麼在您選擇尚未提交的行時,這是可以預料的。

如果不是,它顯然是空閒的,那麼我不認爲你可以運行整個第一個腳本。無論如何,似乎交易仍然是開放的,需要回滾或承諾。

您可以通過運行select * from sys.dm_os_waiting_tasks來看,在blocking_session_id或者如果你在SQL2000,你將需要使用exec sp_who2

這是在Management Studio中證實了這一點?如果是這樣,請使用insert語句和(在更新尚未進行的情況下)進入窗口,根據需要運行rollbackcommit

如果您在SSMS中選擇了一些文本,然後運行它將只執行選定的文本。這可能解釋只有部分腳本可以運行。

+0

@Martin Smith - 我收到一個錯誤:用戶沒有執行此操作的權限。還有其他建議嗎? – leora 2010-07-23 12:00:35

+0

需要更多信息?查詢仍在運行?這兩個查詢都是在SSMS中執行的嗎?你是服務器上的系統管理員?當你有權限錯誤時,你運行了什麼命令? – 2010-07-23 12:04:22

+0

@馬丁史密斯 - 第一個查詢上面定義完成,因爲它返回(0行受到影響)(這是不正確的,但多數民衆贊成在另一個故事)。我怎麼去,並刪除卡住了一些鎖。 。 (根據其他答案,如果我把它放在(nolock)它可以正常工作 – leora 2010-07-23 12:05:41

2

如果您仍在更新第一個表,那麼讀取將不起作用;如果您停止查詢(第一個),它將回滾,但這可能需要一些時間。

改變選擇這樣:

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

它應該立即返回。

希望有幫助

+0

該查詢確實有效,但我仍想擺脫這種「狀態」,因爲使用(nolock)刪除會返回一些行但只會卡住 – leora 2010-07-23 12:00:08

+0

您必須提交或回滾活動事務;它仍然必須處於活動狀態或在某處運行。或者,使用活動監視器來確定什麼是鎖定(而選擇正在運行,而沒有(nolock)) – 2010-07-23 12:12:09

+0

似乎沒有運行活動監視器的權限 – leora 2010-07-23 12:28:29