2010-11-18 8 views
1

En supposant que j'ai une table en tant que tellecontrainte pour la valeur de bit dans TSQL

[StockBarcodeID] [uniqueidentifier] NOT NULL, 
[UserID] [uniqueidentifier] NOT NULL, 
[StockID] [uniqueidentifier] NOT NULL, 
[UnitPrice] [money] NOT NULL, 
[Barcode] [varchar](16) NOT NULL, 
[IsDefault] [bit] NOT NULL, 
[LastUpdated] [datetime] NOT NULL, 

Comment peut-on aller sur la création d'une contrainte qui permet seulement 1 ligne de code à barres par défaut par stockid?

Je n'arrive pas à avoir la tête autour de celui-ci. Est-ce une contrainte unique ou une contrainte de vérification?

+0

double possible (http://stackoverflow.com/questions/4097484/t-sql-unique-constraint-where-anothercolumn-particularvalue) (Et [T-SQL unique Constraint OÙ AnotherColumn = ParticularValue] sont d'autres liens dans cette question pour encore * autres * questions couvrant un motif similaire) –

+0

duplication possible de [Contrainte pour un seul enregistrement marqué comme défaut.] (http://stackoverflow.com/questions/637894/constraint-for-only- un-enregistrement-marqué-comme-défaut) – InSane

+0

Je m'excuse car il semble que vous avez raison et ceci est une copie des autres questions. Le problème est que chacun a sa propre façon de formuler la question et donc les doublons ... Si vous voulez vous sentir libre. Encore pardon :-) –

Répondre

1

Créer une vue qui affiche uniquement les codes à barres par défaut. Créez ensuite un index unique sur cette vue.

CREATE VIEW dbo.DefaultBarcode 
WITH SCHEMABINDING 
AS 
    SELECT StockID, Barcode 
    FROM dbo.Barcode 
    WHERE IsDefault = 1 
GO 
CREATE UNIQUE CLUSTERED INDEX UC_DefaultBarcode ON dbo.DefaultBarcode (StockID) 
GO 
Questions connexes