Ich habe die folgende Tabelle:Wie erstelle ich eine Tabelleneinschränkung, um doppelte Werte in zwei Spalten zu verhindern?
CREATE TABLE [dbo].[EntityAttributeRelship](
[IdNmb] [int] IDENTITY(1,1) NOT NULL,
[EntityIdNmb] [int] NOT NULL,
[AttributeIdNmb] [int] NOT NULL,
[IsActive] [bit] NOT NULL CONSTRAINT [DF_EntityAttributeRelship_IsActive] DEFAULT ((0)),
CONSTRAINT [PK_EntityAttributeRelship] PRIMARY KEY CLUSTERED
([IdNmb] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]
Ein Teil der Daten in der Tabelle wie etwas aussieht:
IdNmb EntityIdNmb AttributeIdNmb IsActive
1 22 7 0
2 22 8 0
3 22 9 0
4 22 10 1
ich sicher, um eine Einschränkung hinzufügen möchten, dass niemand hinzufügt oder Updates ein Datensatz, um IsActive = 1 zu haben, wenn es bereits einen Datensatz für die EntityIdNmb gibt, wobei IsActive = 1 ist.
Wie mache ich das?
@Eric, wenn es die Zeit erlaubt, möchten Sie erklären, warum die Clustered Indexed View-Lösung tomfut und ich Ihre Anfrage nicht erfüllen? Ich halte CI Views für eine elegante Lösung für diese Art von Problemen. –
@Lieven und @tomfut, ich habe einen Trigger dafür erstellt, aber ich werde auch deine Lösung versuchen, da ich deine Antwort zuerst falsch verstanden habe. Danke. –