sql-server - tablas - no se puede truncar la tabla una restricción foreign key hace referencia a ella
¿Cómo deshabilitar Restricciones para todas las tablas y habilitarlo? (4)
Intenta usar este comando
ALTER TABLE table_Name NOCHECK CONSTRAINT all
para deshabilitar todas las restricciones para sus tablas, y hacerlo para todas sus 10 tablas, pero antes de eso, verifique que no haya puesto ningún Delete_Cascade en sus tablas porque el error que se muestra puede deberse también a las dependencias de las subtablas. si no funcionó, intente deshabilitar la restricción específica con este comando, puede que sea dos o tres dependencias adicionales.
ALTER TABLE tableName NOCHECK CONSTRAINT constraintName
Tengo 60 mesas. Quiero soltar 10 tablas donde estas 10 tablas son Restricciones (PK, FK) a otras 20 tablas. Mientras descarto estas 10 tablas, necesito truncar o eliminar datos de las otras 20 tablas. Finalmente, quiero deshabilitar las 60 restricciones de la tabla (FK, PK) y luego habilitar las 60 restricciones de la tabla una vez que termine mi trabajo de agregar / eliminar tablas. es posible?
Cuando suelto una mesa se está pidiendo FK. Cuando trunco esas dependencias FK, también sigue mostrando lo mismo. No quiero meterme con todos esos FK, PK.
Quiero saber el método más inteligente.
Para deshabilitarlo puedes aplicar esto:
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"
Para permitir:
EXEC sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"
GO
También puede querer hacer esto:
EXEC sp_MSforeachtable @command1="ALTER TABLE ? DISABLE TRIGGER ALL"
GO
Para habilitarlos después
EXEC sp_MSforeachtable @command1="ALTER TABLE ? ENABLE TRIGGER ALL"
GO
-- SQL enable all constraints - enable all constraints sql server
-- sp_MSforeachtable is an undocumented system stored procedure
EXEC sp_MSforeachtable @command1="ALTER TABLE ? CHECK CONSTRAINT ALL"
GO
Editar:
Si deshabilitar las restricciones no es suficiente, tendrá que eliminarlas.
Si está eliminando y volviendo a crear las tablas, tendrá que volver a crear las restricciones de clave externa posteriormente.
Si solo necesita eliminar las restricciones, puede encontrar esto útil:
Restricción de clave foránea SQL DROP TABLE
Si necesita escribir un script para eliminar y crear las restricciones, puede encontrar mi publicación aquí más útil:
SQL Server: ¿Cómo obtener una referencia de clave externa desde el esquema de información?
declare @tname varchar(128), @tschema varchar(128);
declare tables cursor for
select TABLE_SCHEMA, TABLE_NAME
from INFORMATION_SCHEMA.TABLES;
open tables;
fetch next from tables
into @tschema, @tname;
while @@FETCH_STATUS = 0
begin
execute (''alter table ['' + @tschema + ''].['' + @tname + ''] nocheck constraint all'');
fetch next from tables
into @tschema, @tname;
end;
close tables;
deallocate tables;