Clé étrangére: SQL Server

Résolu
jobtunisieyasser
Messages postés
123
Date d'inscription
lundi 6 septembre 2004
Statut
Membre
Dernière intervention
23 mars 2007
- 17 avril 2006 à 22:40
cs_CALCAREA
Messages postés
2
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
1 septembre 2007
- 1 sept. 2007 à 14:26
Bonjour
Je suis en VB.net et je travail sur SQL Server
j'ai une table qui contient une clé.
cette clé est utilisé dans plusieurs tables
je veux tester avant d'effacer l'enregistrement dans la table master
si cette clé est utilisé dans d'autre table comme clé étrangére
Je cherche un traitement générique indépendant des nom de la tables, sauf bien sure je connait ma clé

(ex: càd avant d'effacer le clients, tester si il est utiliser dans la table Fact1, Fact2....)
Merci beaucoup, pour vous, qui a fait l'ffort de me répondre, Merci

@_______=-[red]Jobtunisie/red-=_______@
|..................NOURON ALA NOUR.......................|

3 réponses

jobtunisieyasser
Messages postés
123
Date d'inscription
lundi 6 septembre 2004
Statut
Membre
Dernière intervention
23 mars 2007

24 avril 2006 à 10:31
Bon j'ai du faire tous seul une procédure stocké, pour savoir si la clé primaire de mon enregistrement ou son id est utilisé comme clé étrangére dans une autre table.
(ça utilise les table systéme de SQL server )
pour autre besoin ecriver moi ici ;) a++

voiçi le code SQL Server :



<HR>


CREATE PROCEDURE PS_XMED_GET_FK @Param_TableName varchar(20), @Param_ID integer AS
DECLARE @TableName varchar(30),
@ColName varchar(30),
@ColValue int,
@CleNum int,
@Result integer


BEGIN
CREATE TABLE #Result(TabName varchar(30) ,ColName varchar(30) ,Val int,ColN int)


-- Recuperation de la liste des tables qui contiennent une FK avec la tab en parametre
DECLARE Cur_tableFK CURSOR FOR
SELECT sysforeignkeys.fkey, sysobjects.name, syscolumns.name
FROM syscolumns, sysforeignkeys, sysobjects WHERE sysobjects.id sysforeignkeys.fkeyid and sysobjects.idsyscolumns.id and syscolumns.colorder = sysforeignkeys.fkey
AND rkeyid = (SELECT id FROM sysobjects WHERE name= @Param_TableName )


OPEN Cur_tableFK
FETCH NEXT FROM Cur_tableFK INTO @CleNum,@TableName, @ColName
WHILE( @@Fetch_Status = 0 )
BEGIN
-- Test si la cle est utilisee dans une des tabes
EXEC('DECLARE Cur_Exist_FK CURSOR FOR
SELECT ' + @ColName + ' from ' + @TableName +
' Where ' + @ColName + ' = ' + @Param_ID)
-- avant d'inserer il faut vérifier si @colValue <> null
OPEN Cur_Exist_FK
FETCH NEXT FROM Cur_Exist_FK INTO @ColValue
IF (@@FETCH_STATUS = 0)
BEGIN
insert into #Result values(@TableName,@ColName,@ColValue, @CleNum)
END
CLOSE Cur_Exist_FK
DEALLOCATE Cur_Exist_FK


FETCH NEXT FROM Cur_tableFK INTO @CleNum,@TableName, @ColName


END
CLOSE Cur_tableFK
DEALLOCATE Cur_tableFK


--Retourner le résultat
SELECT * FROM #result
END


GO

@_______=-[red]Jobtunisie/red-=_______@
|..................NOURON ALA NOUR.......................|
3
olixelle
Messages postés
506
Date d'inscription
vendredi 30 juillet 2004
Statut
Membre
Dernière intervention
3 mars 2008
2
18 avril 2006 à 13:36
salut,

je crois que les relations sont considérées comme des objets et de fait sont stockées dans la table sysobject

Rollerman
0
cs_CALCAREA
Messages postés
2
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
1 septembre 2007

1 sept. 2007 à 14:26
Bonjour,

    Je trouve cette procédure très intéressante mais d'après ce que je comprends elle suppose que la valeur de clé est toujours un int (@Param_ID) et qu'une clé primaire est toujours représentée par une seule rubrique. Comment pourrait-on faire lorsque le modèle a été construit en définissant des clés primaires qui sont constituées de plusieurs rubriques ?

     Dans le même genre d'idée, je souhaiterais écrire une procédure de suppression en cascade car le modèle de ma base ne le permet pas et les clés primiares ne sont pas définies par une seule rubrique jouant le rôle d'identifiant mais par un groupe de rubrique.

  Merci pour une éventuelle réponse
0