Utilisez des contraintes uniques pour empêcher les enregistrements en double
]Dans les opérations de base de données, il est souvent nécessaire d'assurer l'unicité de combinaisons de colonnes spécifiques. Par exemple, considérez le tableau suivant:
ID | Name | Active | PersonNumber
Ajouter des contraintes uniques aux tables existantes
] Pour ajouter une contrainte unique à une table existante, vous pouvez utiliser l'une des méthodes suivantes:
1.
alter la table dbo.yourtablename Ajouter une contrainte uq_yourtableName unique (Column1, Column2);
ALTER TABLE dbo.yourtablename
ADD CONSTRAINT uq_yourtablename UNIQUE(column1, column2);
Créer un index unique uq_yourtablename
Sur dbo.yourtableName (Column1, Column2); Utiliser des déclencheurs pour empêcher l'insertion répétée
CREATE UNIQUE INDEX uq_yourtablename
ON dbo.yourtablename(column1, column2);
Créer un déclencheur dbo.blockduplicateSurable Sur dbo.yourable Au lieu d'insérer COMME COMMENCER Définir NOCOUNT sur; S'il n'est pas existant ( Sélectionner 1 De inséré comme je Inner Join dbo.yourable comme t Sur I.Column1 = T.Column1 Et i.column2 = T.Column2 ) COMMENCER Insérer dbo.yourTable (Column1, Column2, ...) Sélectionnez Column1, Column2, ... depuis Inserted; FIN AUTRE COMMENCER Imprimer «Aucune action n'a été effectuée. ';; FIN FIN; ALLER
Exemple: Implémentez l'unicité pour PersonNumber et actif
CREATE TRIGGER dbo.BlockDuplicatesYourTable
ON dbo.YourTable
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
IF NOT EXISTS (
SELECT 1
FROM inserted AS i
INNER JOIN dbo.YourTable AS t
ON i.column1 = t.column1
AND i.column2 = t.column2
)
BEGIN
INSERT dbo.YourTable(column1, column2, ...)
SELECT column1, column2, ... FROM inserted;
END
ELSE
BEGIN
PRINT '未执行任何操作。'; -- 更友好的提示信息
END
END;
GO
Utilisez tempdb; ALLER Créer un tableau DBO.Serson ( ID INT Identité (1,1) Clé primaire, Nom nvarchar (32), Bit actif, PersonNumber int )); ALLER ALTER TABLE DBO.SERSON Ajouter une contrainte uq_person unique (personNumber, active); ALLER
Maintenant, toute tentative d'insertion qui viole la contrainte unique échouera avec un message d'erreur, garantissant qu'il n'y a pas d'enregistrement en double avec le même nombre de personnes et les états actifs.
imprimer 'Aucune action n'a été effectuée. L'instruction 'USE tempdb;
GO
CREATE TABLE dbo.Person
(
ID INT IDENTITY(1,1) PRIMARY KEY,
Name NVARCHAR(32),
Active BIT,
PersonNumber INT
);
GO
ALTER TABLE dbo.Person
ADD CONSTRAINT uq_Person UNIQUE(PersonNumber, Active);
GO
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3