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.......................|
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++
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.......................|
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.