2010-06-09 29 views
1

HI! Ceci est ma table:T-SQL Contrainte unique verrouillée sur le serveur 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) 
    .. 
    ) 

J'ai écrit cette contrainte pour assurer que my_column2 combinaison et my_column3 est toujours unique.

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

Mais soudainement .. La DB a cessé de répondre .. il y a un verrou ou quelque chose .. Vous avez une idée pourquoi vous? Qu'est-ce qui est mauvais avec la contrainte? Ce que j'ai déjà vérifié, c'est que j'ai des objets verrouillés quand je choisis * à partir de master.dbo.syslockinfo (joint avec sysprocesses). Après 10 minutes d'inactivité ... cette liste est à nouveau vide et je peux accéder à tous les objets de la base de données. Bizarre ..

Répondre

1

Il doit verrouiller la table tout en vérifiant les données pour voir si elle viole la contrainte ou non, sinon quelques mauvaises données peuvent s'insérer alors qu'il était en train de faire ce

Certaines opérations comme la reconstruction d'un index (Bien sûr, ne pas utiliser le ONLINE dans Enterprise Edition) rendra également la table inaccessible pendant qu'il fait cela

+0

Mais la table a comme 20 lignes en ce moment .. Je ne comprends pas pourquoi cela prendrait-il si longtemps –

+0

avez-vous toutes les grandes colonnes de la table comme image, texte, ntext ou varchar (max) qui contiennent de grandes données? – SQLMenace

+0

Non je ne .. mais j'ai couru la commande sql encore une fois .. et maintenant il semble fonctionner immédiatement .. ne pourrait-il pas être quelque chose avec ces contraintes de clé étrangère? –