2008-12-02 22 views
1

如何判斷一個表是否正在SQL中使用(在任何類型的數據庫上)?如果有人已經在使用它,或者讓它「打開」,然後使用它。表正在使用嗎?

+0

有很多各種各樣的「使用」的。你的意思是表格被程序訪問(DML =插入,更新,刪除,選擇)?你的意思是表格結構正在被修改(DDL)?你的意思是這個表是由一個「活動」應用程序中某個SQL語句引用的嗎? – 2008-12-02 00:27:18

+0

是的,通過程序訪問,插入,更新,刪除,選擇或簡單的BEGIN TRANSACTION(在MS SQL Server中) – igorgue 2008-12-02 04:02:12

回答

0

其實這會給你一個更好的結果:

select spid 
    from master..sysprocesses 
    where dbid = db_id('Works') and spid <> @@spid 
2

檢查桌子上的開鎖。

查看syslockinfo表。

+0

感謝,讓我找到正確的答案:http://msdn.microsoft.com/en-us/ library/ms190345.aspx 對於MS SQL Server – igorgue 2008-12-02 04:03:57

4

一般來說,找出其他人是否正在使用該表並阻止你做任何你想做的事的正確方法是嘗試做你想做的事,並檢查它是否失敗。如果失敗消息指示「非獨佔訪問」或「正在使用的表格」或等效的,那麼你猜對了。

如果您的DBMS支持表鎖定,您可以將鎖應用到表中,然後執行一系列操作 - 但是您會阻止其他人嘗試使用它。

請注意,檢查鎖定表(例如syslockinfo)既是DBMS特有的,也是不可靠的 - 它會導致TOCTOU(檢查時間和使用時間)問題。

相關問題