0

Permettez-moi d'expliquer ce scénario, avec ma table structure-Impossible d'appliquer une contrainte lorsque les données dans une colonne de plusieurs lignes doivent être conservés unique pour la référence d'une clé étrangère particulière

RoomId RoomMemberId 
R1  RM1 
R1  RM2 
R1  RM3  
R2  Rm1 
R2  RM2 
R3  RM1 
R3  RM4 
R3  RM3 

Ici, dans le tableau ci-dessus RM1, RM2 et RM3 sont les membres de la salle R1, maintenant je dois appliquer une contrainte qu'il ne devrait y avoir aucune autre pièce où seulement ces trois sont membres ie il ne devrait pas y avoir d'autre pièce avec les mêmes membres de pièce. Comment puis-je le faire à la fin de la base de données, par une contrainte unique ou de toute autre manière? Pls aide ...

+1

définir un déclencheur ..... –

+0

@MitchWheat - thnx pour votre réponse. Pouvez-vous donner quelques idées pour aller avec le déclencheur avec cette structure de table. – Rajesh

+0

Donc quand vous insérez dans cette table, vous devez vous assurer que les membres de pièce (rm1, rm2, rm3) ne doivent pas être répétés dans d'autres pièces – TheGameiswar

Répondre

0

Exemple de contrainte est tel que donné ci-dessous:

Echantillon Tableau

CREATE TABLE TBLROOMTEST ( RoomID VARCHAR (100), ROOMMEMBERID VARCHAR (100) )

Créer une fonction

Créer une fonction dbo.fn_RoomMemberCheck (@room_id varchar (100), @room_member varchar (100)) renvoyée int AS BEGIN DECLARE @retval int

SELECT @retval = CASE WHEN RoomID = @room_id THEN ELSE 1 0 FIN DE TBLROOMTEST OÙ ROOMMEMBERID = @room_member

RETURN @ retval END;

Ajouter une contrainte après la création de la table (mais cela peut être fait au moment de la création de la table elle-même):

ALTER TABLE TBLROOMTEST ADD CONTRÔLE CONSTRAINT chk_IfMemberExistsInRoom (dbo.fn_RoomMemberCheck (RoomID, ROOMMEMBERID) = 0);

Remarque: Il vous donnera une erreur si vous avez déjà des données dans votre tableau, c'est pourquoi je vous ai demandé la même chose. Référence est prise de Here

+0

thnx gaurav pour mon temps de valeur, ici je vais insérer une ligne à la fois dans ma table, donc la contrainte ur se déclenchera pour RoomId et RoomMemberId de ma première rangée, mais je n'aurai pas de combinaison de valeurs de colonnes (ieRM1, RM2, RM3) pour vérifier les lignes. – Rajesh

+0

Le problème est que la même combinaison de membres (RM1, RM2 et RM3) ne devrait pas être alloué une autre pièce. mais (RM1, RM2, RM3, RM4) peut obtenir une autre pièce, parce que cela une nouvelle combinaison unique, ou (RM1, RM2) peut également obtenir une autre pièce, mais seulement ces trois (RM1, RM2 et RM3) ne devraient pas avoir autre pièce car elles sont déjà attribuées à la pièce R1 avec la même combinaison. – Rajesh

+0

J'ai compris votre scénario ci-dessus. Pouvez-vous donner la logique d'insertion, comment vous insérez des données dans votre table afin que je puisse vous suggérer en conséquence. –