2010-06-09 68 views
1

HI! 這是我的表:T-SQL鎖定SQL服務器的唯一約束條件

CREATE TABLE [ORG].[MyTable]( 
    .. 
    [my_column2] UNIQUEIDENTIFIER NOT NULL CONSTRAINT FK_C1 REFERENCES ORG.MyTable2 (my_column2), 
    [my_column3] INT NOT NULL CONSTRAINT FK_C2 REFERENCES ORG.MyTable3 (my_column3) 
    .. 
    ) 

我寫這個約束,以保證組合my_column2和my_column3始終是唯一的。

ALTER TABLE [ORG].[MyTable] ADD 
CONSTRAINT UQ_MyConstraint UNIQUE NONCLUSTERED 
(
    my_column2, 
    my_column3 
) 

但突然。該DB停止響應..有一個鎖或東西.. 你有任何想法,爲什麼? 約束有什麼不好?

我已經檢查過的是,當我從master.dbo.syslockinfo(與sysprocesses結合)中選擇*時,我有一些鎖定的對象。 10分鐘不活動後,這個列表再次爲空,我可以訪問數據庫中的所有對象。奇怪..

回答

1

它鎖定該表,同時檢查數據,看它是否違反約束與否,否則當它這樣做

像重建索引的一些操作一些不好的數據可能會插入(當然不使用企業版中的ONLINE)也會使表無法訪問,但它這樣做

+0

但表中有20行此刻..我不明白你爲什麼需要那麼長的 – 2010-06-09 16:09:55

+0

表中的任何大型列像圖像,文本,ntext或varchar(max),其中包含大量數據? – SQLMenace 2010-06-09 16:14:01

+0

不,我不..但我再次運行的SQL命令..現在它似乎立即工作..不能是這些外鍵約束? – 2010-06-09 16:19:05