2017-08-04 2 views
0

J'ai deux tables, l'une avec les colonnes accountid, category, code, name, desc et l'autre avec les colonnes id, accountid, code, reason, desc, active.Contrainte de clé étrangère avec clause where dans SQL Server

Est-il possible que je peux créer une contrainte telle que code dans la deuxième table ne contient que des valeurs de code qui sont dans la première table avec condition où la catégorie est somevalue?

+0

dépend votre moteur de base de données – FuzzyTree

+0

Qu'est-ce que cela signifie? (Je suis novice à sql server (ssms)) –

+0

s'il vous plaît marquer la base de données que vous utilisez. ty –

Répondre

0
ALTER TABLE table2 WITH CHECK 
    ADD CONSTRAINT CK_table2category CHECK (category = 'somevalue'), 
     CONSTRAINT FK_table2code FOREIGN KEY (code) REFERENCES table1 (code); 
+0

Cela ne fonctionne pas, sql erreur de lancement du serveur près d'où clause –

+0

'ALTER TABLE [dbo]. [StatusReason] AVEC NOCHECK AJOUTER CONSTRAINT [CK_StatusReason_ValueItem] CHECK ([Category] = 'Statut «), CONTRAINTE [FK_StatusReason_ValueItem] FOREIGN KEY ([StatusCode]) RÉFÉRENCES [dbo]. [ValueItem] ([code]) GO ALTER TABLE [dbo]. [StatusReason] CONTRÔLE CONTRAINTE [CK_StatusReason_ValueItem], [FK_StatusReason_ValueItem] GO' –

+0

J'ai essayé ci-dessus et il a encore échoué –

1

Une méthode est un petit tour. Tout d'abord, créer un index unique sur (category, code) dans la première table:

create unique index unq_table1_category_code on table1(category, code) 

Ensuite, créez une colonne calculée dans table2:

alter table table2 add category as ('somevalue') persisted; 

Ensuite, créez la relation clé étrangère:

alter table table2 add constraint fk_somevalue_code 
    foreign key (category, code) references table1(category, code); 
+0

Je ne pense pas que cela fonctionnera si le 'category + code' n'est pas unique dans la table référencée. Bien que, on peut toujours jeter la table parent 'PK dans, juste pour garantir l'unicité (en supposant qu'il existe, bien sûr). –

+0

@RogerWolf. . . Si les valeurs ne sont pas uniques, une clé étrangère n'a pas pu être utilisée. –