OVH Cloud OVH Cloud

Foreign key sur un même champ

2 réponses
Avatar
SSO
Bonjour,


Sous SQL Serveur 2000, est-il possible de d=E9finir 2 FK sur=20
un m=EAme champs de type int.
Sachant que la premi=E8re FK pointe vers une table et=20
qu'elle doit =EAtre active seulement pour une certaine plage=20
de valeurs (par ex entre 1 et 10) et que la deuxi=E8me FK=20
pointe vers une deuxi=E8me table dont la PK est d=E9finie sur=20
une autre plage de valeurs (11 =E0 20)


exemple :
=20
create table T_REF1 (idref int identity (1,1))
create table T_REF2 (idref int identity (10,1))
create table T_LIENS ( Idref int)

ALTER TABLE T_LIENS ADD CONSTRAINT FK_T_LIENS_T_REF1=20
FOREIGN KEY
(IdRef)
REFERENCES T_REF1(IdRef)=20

ALTER TABLE T_LIENS ADD CONSTRAINT FK_T_LIENS_T_REF2=20
FOREIGN KEY
(IdRef)
REFERENCES T_REF2(IdRef)=20


Jusqu'ici ces deux contraintes sont cr=E9=E9es sans erreurs.
Mais si j'inser=E8re des valeurs dans T_LIENS, j'ai un=20
message d'erreur.=20
Est-ce possible de mettre des conditions de jointures?=20
Pour dire active le lien sur T_REF1 si idref est compris=20
entre 1 et 10 et active l'autre FK si idref compris entre=20
11 et 20.

Merci d'avance

2 réponses

Avatar
Fred BROUARD
non...
En SQL "pur" on pourrait jouer sur la déférabilité des contraintes mais elle n'est pas implémentée sous SQL Server.

En revanche c'est possible via trigger.

A +

SSO a écrit:
Bonjour,


Sous SQL Serveur 2000, est-il possible de définir 2 FK sur
un même champs de type int.
Sachant que la première FK pointe vers une table et
qu'elle doit être active seulement pour une certaine plage
de valeurs (par ex entre 1 et 10) et que la deuxième FK
pointe vers une deuxième table dont la PK est définie sur
une autre plage de valeurs (11 à 20)


exemple :

create table T_REF1 (idref int identity (1,1))
create table T_REF2 (idref int identity (10,1))
create table T_LIENS ( Idref int)

ALTER TABLE T_LIENS ADD CONSTRAINT FK_T_LIENS_T_REF1
FOREIGN KEY
(IdRef)
REFERENCES T_REF1(IdRef)

ALTER TABLE T_LIENS ADD CONSTRAINT FK_T_LIENS_T_REF2
FOREIGN KEY
(IdRef)
REFERENCES T_REF2(IdRef)


Jusqu'ici ces deux contraintes sont créées sans erreurs.
Mais si j'inserère des valeurs dans T_LIENS, j'ai un
message d'erreur.
Est-ce possible de mettre des conditions de jointures?
Pour dire active le lien sur T_REF1 si idref est compris
entre 1 et 10 et active l'autre FK si idref compris entre
11 et 20.

Merci d'avance





--
Frédéric BROUARD, MVP MS SQL Server. Expert Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
Avatar
Fred BROUARD
non...
En SQL "pur" on pourrait jouer sur la déférabilité des contraintes mais elle n'est pas implémentée sous SQL Server.

En revanche c'est possible via trigger.

A +

SSO a écrit:
Bonjour,


Sous SQL Serveur 2000, est-il possible de définir 2 FK sur
un même champs de type int.
Sachant que la première FK pointe vers une table et
qu'elle doit être active seulement pour une certaine plage
de valeurs (par ex entre 1 et 10) et que la deuxième FK
pointe vers une deuxième table dont la PK est définie sur
une autre plage de valeurs (11 à 20)


exemple :

create table T_REF1 (idref int identity (1,1))
create table T_REF2 (idref int identity (10,1))
create table T_LIENS ( Idref int)

ALTER TABLE T_LIENS ADD CONSTRAINT FK_T_LIENS_T_REF1
FOREIGN KEY
(IdRef)
REFERENCES T_REF1(IdRef)

ALTER TABLE T_LIENS ADD CONSTRAINT FK_T_LIENS_T_REF2
FOREIGN KEY
(IdRef)
REFERENCES T_REF2(IdRef)


Jusqu'ici ces deux contraintes sont créées sans erreurs.
Mais si j'inserère des valeurs dans T_LIENS, j'ai un
message d'erreur.
Est-ce possible de mettre des conditions de jointures?
Pour dire active le lien sur T_REF1 si idref est compris
entre 1 et 10 et active l'autre FK si idref compris entre
11 et 20.

Merci d'avance





--
Frédéric BROUARD, MVP MS SQL Server. Expert Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************