Amigos,
Como uds saben ante operaciones tales como el borrado de datos de tablas referenciadas por FK, es necesario desahbilitar los mismos, para luego, una vez borrada la data, volver a habilitarlos.
Les dejo aquí un script que permite automatizar la tarea, espero que les sea de utilidad.
--------------------------------------------------------------------------------------------------------------------
-- Detalle: Este script permite deshabilitar/habilitar todos los FK de de una BD --
-- Gustavo Herrera para Sql Server Tips - http://gherrerasqlserver.blogspot.com/ --
---------------------------------------------------------------------------------------------------------------------
DECLARE
@TableName varchar(255),
@sql varchar(4000)
DECLARE cTable CURSOR FORWARD_ONLY FOR
-- Obtengo los nombres de las tablas de las bases de datos.
SELECT name
FROM sys.objects
WHERE
type = 'U'
OPEN cTable
FETCH NEXT FROM cTable
INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
-- Para deshabilitar
SET @sql = 'alter table [' + @TableName + '] nocheck constraint all'
-- Para volver a habilitar
SET @sql = 'alter table ' + @TableName + ' check constraint all '
EXEC (@sql)
FETCH NEXT FROM cTable INTO @TableName
END
CLOSE cTable
DEALLOCATE cTable
Mi nombre es Gustavo Herrera. Me desempeño profesionalmente como DBA especializado en Microsoft Sql Server, formo parte activamente de la Comunidad Sql Server de Argentina (comunidad oficial de Microsoft). La idea de este blog es generar un vínculo más de intercambio con uds., mis queridos colegas. Espero que se sientan a gusto, pasen, vean, opinen, comenten, critiquen, aporten.. este blog lo hacemos entre todos.
Buscar este blog
lunes, 6 de junio de 2011
Conocer Todos los Foreign Key de una Base de Datos.
Amigos,
Les dejo un script que les permitirá conocer todos los Foreign Key de todas las tablas de una Base de Datos.
Es un script muy útil a la hora de encarar un proceso de migración, borrado, update, inserción de datos etc en cualquier tabla.
La idea es no tener que recorrer por consola una a una las tablas y poder solucionar esto rápidamente.
Va el script:
-------------------------------------------------------------------------------------
-- Detalle: Este script permite listar todos los FK de todas las tablas de una BD --
-- Gustavo Herrera para Sql Server Tips - http://gherrerasqlserver.blogspot.com/ --
-- ----------------------------------------------------------------------------------
SELECT
Origin_Table = FK.TABLE_NAME,
Constraint_Name = C.CONSTRAINT_NAME,
FK_Column = CU.COLUMN_NAME,
Reference_Table = PK.TABLE_NAME,
Reference_Column = PT.COLUMN_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
INNER JOIN (
SELECT i1.TABLE_NAME, i2.COLUMN_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY'
) PT ON PT.TABLE_NAME = PK.TABLE_NAME
ORDER BY
origin_table
Les dejo un script que les permitirá conocer todos los Foreign Key de todas las tablas de una Base de Datos.
Es un script muy útil a la hora de encarar un proceso de migración, borrado, update, inserción de datos etc en cualquier tabla.
La idea es no tener que recorrer por consola una a una las tablas y poder solucionar esto rápidamente.
Va el script:
-------------------------------------------------------------------------------------
-- Detalle: Este script permite listar todos los FK de todas las tablas de una BD --
-- Gustavo Herrera para Sql Server Tips - http://gherrerasqlserver.blogspot.com/ --
-- ----------------------------------------------------------------------------------
SELECT
Origin_Table = FK.TABLE_NAME,
Constraint_Name = C.CONSTRAINT_NAME,
FK_Column = CU.COLUMN_NAME,
Reference_Table = PK.TABLE_NAME,
Reference_Column = PT.COLUMN_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
INNER JOIN (
SELECT i1.TABLE_NAME, i2.COLUMN_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY'
) PT ON PT.TABLE_NAME = PK.TABLE_NAME
ORDER BY
origin_table
Suscribirse a:
Entradas (Atom)