Maison >base de données >tutoriel mysql >Comment s'assurer qu'un seul enregistrement a isDefault = 1 par FormID dans une table SQL Server ?

Comment s'assurer qu'un seul enregistrement a isDefault = 1 par FormID dans une table SQL Server ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-04 01:26:10303parcourir

How to Ensure Only One Record Has isDefault = 1 per FormID in a SQL Server Table?

Garantir un enregistrement par défaut unique dans la table de base de données

Problème

Comment une contrainte peut-elle être implémentée pour restreindre une table de base de données de telle sorte qu'un seul enregistrement puisse posséder une valeur de champ "isDefault" spécifique de 1 ? La contrainte s'applique à un sous-ensemble d'enregistrements identifiés par un champ « FormID ».

Solution : index filtré unique pour SQL Server 2008 ou supérieur

SQL Server 2008 et supérieur fournit une solution utilisant un filtre unique index :

CREATE UNIQUE INDEX IX_TableName_FormID_isDefault
ON TableName(FormID)
WHERE isDefault = 1

Considérez le tableau suivant structure :

CREATE TABLE TableName(
    FormID INT NOT NULL,
    isDefault BIT NOT NULL
)

L'insertion de plusieurs enregistrements avec les mêmes "FormID" et "isDefault" que 1 entraînera l'erreur suivante :

Cannot insert duplicate key row in object 'dbo.TableName' with unique
index 'IX_TableName_FormID_isDefault'. The duplicate key value is (1).

Cette erreur applique efficacement la contrainte, garantissant un seul enregistrement par "FormID" peut avoir "isDefault" défini sur 1.

(Source : https://technet.microsoft.com/en-us/library/cc280372.aspx)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn