Quiero eliminar todas las restricciones predeterminadas, verificar restricciones, restricciones únicas, claves principales y claves externas de todas las tablas en una base de datos de SQL Server. Sé cómo obtener todos los nombres de restricciones sys.objects
, pero ¿cómo puedo completar la ALTER TABLE
parte?
sql-server
ddl
constraint
Aaron Bertrand
fuente
fuente
Respuestas:
Puede derivar esta información fácilmente uniéndose
sys.tables.object_id = sys.objects.parent_object_id
a esos tipos de objeto.PRINT
solo está ahí para observar: si tiene muchas restricciones, es posible que no muestre todo el script porque está limitado a 8K. En esos casos, consulte este consejo para conocer otras formas de validar el script antes de ejecutarlo.Una vez que esté satisfecho con la salida, descomente el
EXEC
.fuente
ORDER BY (CASE WHEN c.[type] IN ('PK', 'UQ') THEN 1 ELSE 0 END)
Comencé con la respuesta aceptada y modifiqué la estructura para usar un ciclo while en lugar de construir la declaración sql completa en sql dinámico. Esto me gusta más por varias razones.
La consulta no se almacena en la gran variable @sql. Esta implementación permite una impresión para cada restricción que se descarta para fines de registro en la salida. La ejecución pareció un poco más rápida en las pruebas de mi unidad.
fuente