Existe-t-il une requête dans SQL Server 2008 qui supprimera également les données de toutes les tables dépendantes, ainsi que la table sélectionnée? Mes excuses pour ne pas avoir élaboré sur la question. Je sais que Cascade Delete fonctionnerait bien, mais mon application se connecte à une base de données SQL Server tierce. 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 Supprimer Cascade et je ne peux pas les créer ou les créer. Je suis à la recherche d'une manière générique de traverser les dépendances et de supprimer les données dans le bon ordre.Supprimer des données des tables dépendantes
7
A
Répondre
7
Comme il sont relations clés étrangères, script suivant pourrait vous aider à démarrer mimer une cascade supprimer.
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
1
Lisez à propos de ON CASCADE DELETE
de msdn, livres, articles et vous trouverez la réponse.
2
Pour ce faire, vous définissez une contrainte entre les tables avec suppression en cascade. Vous pouvez le faire dans un diagramme en faisant glisser une connexion entre les champs et la modification des propriétés, ou en utilisant une requête:
alter table SomeTable
add constraint SomeConstraint
foreign key (SomeField) references SomeOtherTable (SomeOtherField)
on delete cascade
Questions connexes
- 1. Tri des tables de base de données les moins dépendantes à les plus dépendantes
- 2. Supprimer des éléments des tables SWT
- 3. Modélisation des données - comment gérer deux colonnes "status" dépendantes?
- 4. Supprimer des tables mysql dans Rails
- 5. Supprimer les entrées des tables reliées
- 6. supprimer des enregistrements de 2 tables
- 7. Comment supprimer des lignes de tables référencées?
- 8. PLINK et supprimer des parties des données
- 9. NHibernate pour créer/modifier/supprimer dynamiquement des tables
- 10. EF CTP4 - créer des tables, mais pas supprimer DB
- 11. Récupération des données de tables transparentes
- 12. Affichage des données de plusieurs tables MySQL
- 13. Insérer des données dans plusieurs tables
- 14. Comment obtenir des données 3 tables?
- 15. trouver les tables a des données binaires
- 16. Insérer des données dans 3 tables liées
- 17. Insertion de données dans des tables SQL
- 18. insérer des données dans plusieurs tables
- 19. données Hiérarchie Obtenir des tables d'auto-référencement
- 20. Déchiquetage de données XML dans des tables
- 21. Comment publier des applications dépendantes de fichiers externes
- 22. comment écrire des données dans des tables de stockage azur
- 23. Insérer des données XML dans des tables SQL
- 24. mysqldump avec des tables fédérées
- 25. Comment supprimer des tables vides d'un fichier de sauvegarde MySQL
- 26. Impossible de supprimer les bordures des tables dans Word export
- 27. Propriétés dépendantes
- 28. mysqldump toutes les tables avec des données, avec des instructions create et add-drop tables
- 29. Performances des tables SharePoint et des tables de base de données
- 30. Rechercher TreeViewItem pour supprimer des données
Si vous aviez des contraintes d'intégrité (clés étrangères) avec une règle de suppression en cascade, vous ne devriez pas vous inquiéter. http://publib.boulder.ibm.com/infocenter/idshelp/v10/topic/com.ibm.sqls.doc/sqls292.htm – AlexanderMP
Même si le lien concerne la documentation informix, il en va de même pour le serveur SQL. – Giorgi
si vous avez au moins des clés étrangères définies (sans suppression en cascade), il serait possible d'utiliser les tables système pour créer un SQL dynamique et en fait faire la même chose que les suppressions en cascade. Si aucune clé étrangère n'est définie, il y a peu d'espoir de trouver une solution générique. –