Bases de datos

SQL Server

Eliminación y creación de llaves foráneas

Última actualización: 14-11-2017 18:46

La unión de estos dos SELECTs da como resultado el listado de comandos de eliminación y creación de todas las llaves foráneas que existan en la base de datos a la que se está conectado.

IMPORTANTE:
Este comando no es útil al 100% si existen llaves foráneas a tablas cuya llave primaria esté compuesta de más de una columna.

 
declare @fks TABLE ( DROP_FK varchar(max), ADD_FK varchar(max));
insert into @fks
select
		'if exists (select * from sys.foreign_keys where name = ''' + b.name + ''') '
		+ 'alter table [' + e.name + '].[' + c.name + '] drop constraint [' + b.name + '];' as DROP_FK,
		'if not exists (select * from sys.foreign_keys where name = ''' + b.name + ''') '
		+ 'alter table [' + e.name + '].[' + c.name + '] add constraint [' + b.name + ']'
				+ ' foreign key ([' + h.name + ']) references [' + d.name + '].[' + a.name + '] ([' + g.name + '])'
				+ case when delete_referential_action_desc = 'CASCADE' then ' ON DELETE CASCADE' else '' end
				+ case when update_referential_action_desc = 'CASCADE' then ' ON UPDATE CASCADE' else '' end
				+ ';'  as ADD_FK
from sys.objects a
	inner join sys.foreign_keys b on b.referenced_object_id = a.object_id
	inner join sys.objects c on c.object_id = b.parent_object_id
	inner join sys.schemas d on d.schema_id = a.schema_id
	inner join sys.schemas e on e.schema_id = c.schema_id
	inner join sys.foreign_key_columns f on f.constraint_object_id = b.object_id
	inner join sys.columns g on g.object_id = a.object_id and g.column_id = f.referenced_column_id
	inner join sys.columns h on h.object_id = c.object_id and h.column_id = f.parent_column_id;
 
 
select XSQL from (select 1 as XO, DROP_FK as XSQL from @fks union select 2, ADD_FK from @fks ) b order by b.XO;
 
go
 

 

Política de Privacidad

Última actualización: 23 de diciembre de 2024

 X 

Tu privacidad es importante para nosotros. En esta política de privacidad, explicamos qué información recopilamos cuando visitas nuestro sitio web y cómo utilizamos esa información.

1. Información que recopilamos

Este sitio no recopila información personal de los usuarios, excepto cuando un usuario elige voluntariamente comunicarse a través del formulario de contacto. En ese caso, los datos proporcionados (como tu nombre y correo electrónico) se utilizarán únicamente para responder a tu consulta.

2. Uso de Cookies

Este sitio web utiliza una única cookie esencial llamada PHPSESSID.

No usamos cookies de análisis ni de seguimiento.

3. Seguridad de los datos

Adoptamos medidas técnicas y organizativas razonables para proteger cualquier información que compartas con nosotros contra el acceso no autorizado, pérdida o alteración.

4. Enlaces a sitios de terceros

Nuestro sitio web puede contener enlaces a otros sitios web. No somos responsables de las prácticas de privacidad ni del contenido de dichos sitios.

5. Cambios en esta política de privacidad

Nos reservamos el derecho de actualizar esta política de privacidad en cualquier momento. Cualquier cambio será publicado en esta misma página e incluirá la fecha de la última actualización.

6. Contacto

Si tienes preguntas o inquietudes sobre esta política de privacidad, puedes comunicarte con nosotros a través de la página de contacto disponible en este sitio web.

7. Cumplimiento con Normativas Internacionales de Privacidad

Nuestro sitio web cumple con las principales regulaciones internacionales de protección de datos personales para garantizar la privacidad y seguridad de los usuarios. Esto incluye, pero no se limita a, las siguientes leyes:

Si tienes preguntas o dudas sobre el cumplimiento de estas leyes, no dudes en ponerte en contacto conmigo a través de la página de contacto de este sitio web.