Dans Oracle, pour supprimer toutes les tables et contraintes, vous devez taper quelque chose comme
DROP TABLE myTable CASCADE CONSTRAINTS PURGE;
et cela effacerait complètement les tables et leurs dépendances. Quel est l'équivalent serveur SQL?
Je ne crois pas que SQL propose une solution aussi élégante. Vous devez supprimer toutes les contraintes liées avant de pouvoir supprimer la table.
Heureusement, tout cela est stocké dans le schéma d'information et vous pouvez y accéder pour obtenir votre liste de résultats.
Cet article de blog devrait pouvoir vous fournir ce dont vous avez besoin: http://weblogs.asp.net/jgalloway/archive/2006/04/12/442616.aspx
-- t-sql scriptlet to drop all constraints on a table
DECLARE @database nvarchar(50)
DECLARE @table nvarchar(50)
set @database = 'DatabaseName'
set @table = 'TableName'
DECLARE @sql nvarchar(255)
WHILE EXISTS(select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where constraint_catalog = @database and table_name = @table)
BEGIN
select @sql = 'ALTER TABLE ' + @table + ' DROP CONSTRAINT ' + CONSTRAINT_NAME
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
where constraint_catalog = @database and
table_name = @table
exec sp_executesql @sql
END
Dans SQL Server Management Studio, accédez à Options/Explorateur d'objets SQL Server/Script, puis activez «Générer un script pour les objets dépendants». Cliquez ensuite avec le bouton droit de la souris sur la table, le script> déposer vers> la nouvelle fenêtre de requête et elle sera générée à votre place.
Cela pourrait être une solution horrible, mais je trouve que c'est rapide. Cela ressemble à la réponse de Vinnie, mais le produit de l'instruction SQL est une autre série d'instructions SQL qui supprimera toutes les contraintes et les tables.
(
select
'ALTER TABLE ' + tc.table_name + ' DROP CONSTRAINT ' + tc.constraint_name + ';'
from
INFORMATION_SCHEMA.TABLES t
,INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
where
t.table_name = tc.table_name
and tc.constraint_name not like '%_pk'
and tc.constraint_name not like 'pk_%'
and t.table_catalog='<schema>'
) UNION (
select
'DROP TABLE ' + t.table_name + ';'
from
INFORMATION_SCHEMA.TABLES t
where
t.table_catalog='<schema>'
)
Tout cela est amusant et amusant jusqu'à ce qu'une table fasse référence à votre table ...
Ensuite, je dois modifier le code fourni comme suit:
CREATE PROCEDURE _cascadeConstraints @database nvarchar(30) = NULL, @table nvarchar(60) = NULL
as
DECLARE @sql nvarchar(255)
WHILE EXISTS(select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where constraint_catalog = @database and table_name = @table)
BEGIN
select @sql = 'ALTER TABLE ' + @table + ' DROP CONSTRAINT ' + CONSTRAINT_NAME
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
where constraint_catalog = @database and
table_name = @table
select @sql = 'ALTER TABLE ' + tc.TABLE_NAME + ' DROP CONSTRAINT ' + tc.CONSTRAINT_NAME
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc join
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc on
(rc.CONSTRAINT_CATALOG = tc.CONSTRAINT_CATALOG and
rc.CONSTRAINT_NAME = tc.CONSTRAINT_NAME) join
INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc_pk on
(tc_pk.CONSTRAINT_CATALOG = rc.CONSTRAINT_CATALOG and
tc_pk.CONSTRAINT_NAME = rc.UNIQUE_CONSTRAINT_NAME)
where tc.constraint_catalog = @database
and tc_pk.TABLE_NAME = @table
exec sp_executesql @sql
END
go
En fin de compte, nous supprimons notre table . Nous pouvons donc simplement exécuter la commande suivante:
ALTER TABLE ... BAISSE DE CONTRAINTES ...
DROP TABLE ...
1> ALTER TABLEPRJ_DETAILSDROP CONSTRAINTFK_PRJ_TYPE;
- Le nom de la table et le nom de la contrainte sont les paramètres.
2> DROP TABLE.
Première contrainte de suppression avec son nom associé à la table Deuxièmement, vous pouvez supprimer la table.
Cela a fonctionné pour moi et c'est facile aussi.
J'ai juste besoin de supprimer la clé étrangère
DECLARE @database nvarchar(50)
DECLARE @TABLE_NAME nvarchar(250)
DECLARE @CONSTRAINT_NAME nvarchar(250)
DECLARE @sql nvarchar(350)
set @database = 'XXX'
DECLARE db_cursor CURSOR FOR
select TABLE_NAME, CONSTRAINT_NAME from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where constraint_catalog = @database and CONSTRAINT_TYPE='FOREIGN KEY'
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @TABLE_NAME, @CONSTRAINT_NAME
WHILE @@FETCH_STATUS = 0
BEGIN
select @sql = 'ALTER TABLE ' + @TABLE_NAME + ' DROP CONSTRAINT ' + @CONSTRAINT_NAME
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
where constraint_catalog = @database and
table_name = @TABLE_NAME
exec sp_executesql @sql
FETCH NEXT FROM db_cursor INTO @TABLE_NAME, @CONSTRAINT_NAME
END
CLOSE db_cursor
DEALLOCATE db_cursor