update foreign eliminacion delete constraint cascada borrar borrado actualizacion sql sql-server cascade database-table sql-drop

eliminacion - foreign key on update cascade sql server



SQL Server: caĆ­da de la tabla en cascada equivalente? (6)

En Oracle, para eliminar todas las tablas y restricciones, debe escribir algo como

DROP TABLE myTable CASCADE CONSTRAINTS PURGE;

y esto eliminaría completamente las tablas y sus dependencias. ¿Cuál es el equivalente del servidor SQL?


En SQL Server Management Studio, vaya a Opciones / SQL Server Object Explorer / Scripting, y active ''Generar script para objetos dependientes''. Luego haga clic derecho en la tabla, script> soltar a> nueva ventana de consulta y la generará por usted.


En definitiva estamos eliminando nuestra mesa. Así que simplemente podemos ejecutar 2 siguientes comandos:

ALTERAR MESA ... RESTRICCIÓN DE CAÍDA ...

MESA PLEGABLE ...

1> ALTER TABLE PRJ_DETAILS DROP CONSTRAINT FK_PRJ_TYPE ;

- El nombre de la tabla y el nombre de la restricción son el parámetro

2> TABLA DE GOTA.

Primera restricción de descarte con su nombre asociado a su tabla. Segundo, puede soltar la tabla.

Funcionó para mí y es fácil también.


Esta podría ser una solución horrible, pero me parece rápida. Es similar a la respuesta de Vinnie, pero el producto de la declaración SQL es otra serie de declaraciones SQL que eliminará todas las restricciones y tablas.

( 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>'' )


Esto es todo diversión y juegos hasta que alguna mesa haga referencia a tu mesa ...

Entonces debo alterar el código provisto así:

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


No creo que SQL tenga una solución igualmente elegante. Debe eliminar las restricciones relacionadas antes de poder eliminar la tabla.

Afortunadamente, todo esto se almacena en el esquema de información y puede acceder a él para obtener su lista de whack.

Esta publicación de blog debería poder brindarle lo que necesita: 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


Solo necesito borrar la clave externa

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