當我在SQL Server Management Studio中右鍵單擊一個表並選擇'編輯最高200行'時,在什麼時候,如果有的話,我正在查看的數據會被鎖定?在SQL Server Management Studio 2008中編輯數據行時是否鎖定了數據行?
我的一位同事表示,當以這種方式查看數據時,數據行可以被鎖定(我認爲當他說如果你把光標放在一行上並開始編輯數據)。
這是唯一一次在這種情況下可以鎖定數據嗎?
當我在SQL Server Management Studio中右鍵單擊一個表並選擇'編輯最高200行'時,在什麼時候,如果有的話,我正在查看的數據會被鎖定?在SQL Server Management Studio 2008中編輯數據行時是否鎖定了數據行?
我的一位同事表示,當以這種方式查看數據時,數據行可以被鎖定(我認爲當他說如果你把光標放在一行上並開始編輯數據)。
這是唯一一次在這種情況下可以鎖定數據嗎?
這是不正確的。運行在一個窗口這個腳本(並保持運行狀態):
create table Tx (
ID int not null,
Val1 varchar(20) not null
)
go
insert into Tx (ID,Val1)
select 1,'abc'
go
set nocount on
while 1=1
begin
update Tx set Val1 = CASE WHEN Val1='abc' then 'def' else 'abc' end
RAISERROR('Updated',10,1) WITH NOWAIT
WAITFOR DELAY '00:00:05'
end
每5秒,它翻轉Val1
列的值,並打印在消息選項卡Updated
(假設你設置爲「結果格」)。
然後,在另一個SSMS實例中,打開Tx
表並開始編輯其中的單行。觀察腳本繼續執行更新。
默認情況下,SSMS GUI編輯器中的數據不會被鎖定。
如果您進行了更改並嘗試保存,您將收到錯誤/警告ato覆蓋/丟棄等。我現在無法測試以查看確切的消息,對不起。
看來,一些錯誤/警告對話框實際上可能會導致鎖 - 我在一個新的答案中詳細說明了這一點。 – TTT 2014-02-23 19:37:52
它可以被鎖定。在編輯面板中,嘗試插入一行並違反主鍵約束。你會得到一個錯誤的對話框彈出消息。當您閱讀該消息時,表格現在將被鎖定。如果你沒有確認消息而走開,那張表將被無限期鎖定。我剛剛用SSMS 2008R2和SSMS 2012證實了這一點。
這有點嚇人。幸運的是,我們的團隊中沒有任何人可以讓對話開放! (我希望:))謝謝你去努力去證明這一點。非常感激。 – 2014-02-24 08:49:05
感謝Damien和gbn提供的答案。我想將這兩個標記標記爲已接受。由於提供了SQL腳本,我將接受Damien's,這可以幫助我證明在編輯數據時SSMS中會發生什麼。但同樣感謝你們兩個。 – 2011-12-22 11:01:12