Je vais vous guider à travers un exemple donc, vous pouvez voir pourquoi cela prenait beaucoup de temps. Création d'une base de données vide pour ce test.
CREATE DATABASE [TestFK]
GO
Création de 2 tables.
USE [TestFK]
GO
CREATE TABLE dbo.[Address] (
ADDRESSID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
Address1 VARCHAR(50),
City VARCHAR(50),
[State] VARCHAR(10),
ZIP VARCHAR(10));
GO
CREATE TABLE dbo.Person (
PersonID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
LastName VARCHAR(50) NOT NULL,
FirstName VARCHAR(50),
AddressID INT);
GO
Création d'une contrainte de clé étrangère sur la table Personne.
USE [TestFK]
GO
ALTER TABLE dbo.Person ADD CONSTRAINT FK_Person_AddressID FOREIGN KEY (AddressID)
REFERENCES dbo.Address(AddressID)
GO
Insérez des données dans les deux tableaux.
USE [TestFK]
GO
INSERT dbo.Address (Address1,City,[State],Zip)
SELECT '123 Easy St','Austin','TX','78701'
UNION
SELECT '456 Lakeview','Sunrise Beach','TX','78643'
GO
INSERT dbo.Person (LastName,FirstName,AddressID)
SELECT 'Smith','John',1
UNION
SELECT 'Smith','Mary',1
UNION
SELECT 'Jones','Max',2
GO
Ouvrez une nouvelle fenêtre de requête et exécutez-la (ne fermez pas la fenêtre une fois la requête terminée).
USE [TestFK]
GO
BEGIN TRAN
INSERT dbo.Person (LastName,FirstName,AddressID)
SELECT 'Smith1','John1',1
UNION
SELECT 'Smith1','Mary1',1
UNION
SELECT 'Jones1','Max1',2
Ouvrez une autre fenêtre de requête et exécutez-la.
USE [TestFK]
GO
ALTER TABLE dbo.person DROP CONSTRAINT FK_Person_AddressID
Vous verrez que vous supprimez la contrainte continuera à fonctionner (en attente) et exécutez maintenant la requête pour voir pourquoi elle s'exécute plus longtemps et quels verrous elle attend.
SELECT * FROM sys.dm_os_waiting_tasks
WHERE blocking_session_id IS NOT NULL;
Une fois que vous avez validé votre opération d'insertion, la contrainte de suppression se termine immédiatement car l'instruction de suppression peut désormais acquérir le verrou requis.
Pour votre cas, vous devez vous assurer qu'aucune session ne détient un verrou compatible, ce qui empêchera la contrainte de chute d'acquérir le ou les verrous nécessaires.