Maison > base de données > tutoriel mysql > Comment s'assurer qu'un seul enregistrement a un indicateur « isDefault » défini sur 1 dans SQL Server ?

Comment s'assurer qu'un seul enregistrement a un indicateur « isDefault » défini sur 1 dans SQL Server ?

Linda Hamilton
Libérer: 2025-01-01 12:38:11
original
384 Les gens l'ont consulté

How to Ensure Only One Record Has an 'isDefault' Flag Set to 1 in SQL Server?

Garantir un seul enregistrement avec l'indicateur 'isDefault'

Dans une table de base de données, vous souhaiterez peut-être restreindre les données de telle sorte qu'un seul enregistrement par le groupe défini peut avoir un indicateur "isDefault" spécifique défini sur 1. Cela pose un défi car la contrainte ne s'applique pas à l'ensemble de la table mais s'applique plutôt à un sous-ensemble de lignes identifié par un identifiant unique.

Solution : Utilisation d'un index filtré unique

Les versions modernes de SQL Server (2008 et ultérieures) offrent une solution utilisant des index filtrés uniques. En créant un tel index, vous pouvez appliquer la contrainte sur le champ "isDefault" pour un ensemble de lignes spécifié.

Syntaxe de création d'index

Pour une table définie comme suit :

CREATE TABLE TableName(
    FormID INT NOT NULL,
    isDefault BIT NOT NULL
)
Copier après la connexion

Vous pouvez créer l'index filtré unique en utilisant ce qui suit syntaxe :

CREATE UNIQUE INDEX IX_TableName_FormID_isDefault
    ON TableName(FormID)
    WHERE isDefault = 1
Copier après la connexion

Cet index empêchera les violations de clé en double lors de la tentative d'insertion de plusieurs enregistrements avec le même FormID et "isDefault" défini sur 1. Par exemple :

INSERT INTO TableName(FormID, isDefault) VALUES (1, 1)
INSERT INTO TableName(FormID, isDefault) VALUES (1, 1) -- Will result in a unique key violation error
Copier après la connexion

En établissant cet index, vous vous assurez effectivement qu'un seul enregistrement dans chaque ensemble FormID peut posséder l'indicateur "isDefault" défini sur 1, conservant ainsi l'intégrité des données souhaitée.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal