Y a-t-il une requête dans SQL Server 2008 qui supprimera également des données de toutes les tables dépendantes, ainsi que la table sélectionnée? P>
Mes excuses pour ne pas avoir élaboré sur la question. Je sais que Delete Cascade fonctionnerait bien, mais ma candidature se connecte à une 3ème partie SQL Server DB. J'ai quelques tests unitaires qui insèrent dans la table cible et les tables dépendantes. Malheureusement, les contraintes sur la table cible ne sont pas sur Suppr Cascade et je ne peux pas les créer ou les avoir créés. Je cherche une manière générique de traverser les dépendances et la suppression de données dans le bon ordre. P>
3 Réponses :
Lire environ sur cascade Supprimer code> de MSDN, des livres, des articles et vous trouverez la réponse. P>
Pour faire cela, vous configurez une contrainte entre les tables avec une suppression en cascade. Vous pouvez le faire dans un diagramme en faisant glisser une connexion entre champs et en modifiant les propriétés, ou à l'aide d'une requête:
Comme là-bas strong> sont forts> Relations de clé étrangère, le script suivant peut vous aider à imiter une suppression en cascade.
DECLARE @TableName VARCHAR(32) DECLARE @PrimaryKey VARCHAR(32) SET @TableName = 'MasterTable' SET @PrimaryKey = '1' SELECT 'DELETE FROM ' + fks.name + '.' + fkt.name + ' WHERE ' + pc.name + ' = ' + @PrimaryKey , fko.name as [FK Name] , fk.constraint_column_id as [Col Order] , fks.name + '.' + fkt.name as [FK table] , pc.name as [FK column] , rcs.name + '.' + rct.name as [PK table] , rc.name as [PK column] FROM sys.foreign_key_columns fk -- FK columns INNER JOIN sys.columns pc ON fk.parent_object_id = pc.object_id AND fk.parent_column_id = pc.column_id INNER JOIN sys.objects fkt ON pc.object_id = fkt.object_id INNER JOIN sys.schemas as fks ON fks.schema_id = fkt.schema_id -- referenced PK columns INNER JOIN sys.columns rc ON fk.referenced_object_id = rc.object_id AND fk.referenced_column_id = rc.column_id INNER JOIN sys.objects rct ON rc.object_id = rct.object_id INNER JOIN sys.schemas as rcs ON rcs.schema_id = rct.schema_id -- foreign key constraint name INNER JOIN sys.objects fko ON fk.constraint_object_id = fko.object_id WHERE rct.Name = @TableName
Si vous aviez des contraintes d'intégrité (clés étrangères) avec la règle de la suppression en cascade, vous n'auriez pas à vous inquiéter. Publib.Boulder.ibm. Com / InfoCenter / IDSHELP / V10 / Sujet / ...
Même si le lien est pour Informix, la documentation est la même chose pour SQL Server.
Si vous avez au moins des clés étrangères définies (sans supprimation en cascade), il serait possible d'utiliser les tables système pour créer une SQL dynamique et en effet, de la sorte que les suppressions en cascade. S'il n'y a pas de clés étrangères définies, il y a peu d'espoir de faire une solution générique pour cela.
@Lieven, oui il existe des relations clés étrangères avec les tables dépendantes. Pourriez-vous s'il vous plaît élaborer sur votre suggestion?
Voir Stackoverflow.com/Questtions/485581/...