Antecedentes: algunas de nuestras restricciones de columna predeterminadas se generaron sin nombres explícitos, por lo que obtenemos nombres divertidos que varían de un servidor a otro como: DF__User__TimeZoneIn__5C4D869D
Preferiría que todos sean manejables con un nombre consistente como DF_Users_TimeZoneInfo
para que podamos asegurarnos de que existan las restricciones apropiadas en las tablas de destino futuras (como en la comparación de RedGate, o incluso solo visualmente)
Tengo un script que funciona principalmente para lo que quiero:
select 'sp_rename N''[' + s.name + '].[' + d.name + ']'',
N''[DF_' + t.name + '_' + c.name + ']'', ''OBJECT'';'
from sys.tables t
join
sys.default_constraints d
on d.parent_object_id = t.object_id
join
sys.columns c
on c.object_id = t.object_id
and c.column_id = d.parent_column_id
join sys.schemas s
on t.schema_id = s.schema_id
WHERE d.NAME like 'DF[_][_]%'
Pero esto solo me da un conjunto de resultados, y no algo que realmente pueda pasar a un ejecutivo o lo que sea.
¿Cómo puedo hacer esto para poder ejecutar esos sp_rename
scripts sin tener que recurrir a copiar todos los elementos devueltos y pegarlos en una nueva ventana de consulta y ejecutarlos nuevamente? Intento guardar tantas pulsaciones de teclas como sea posible para poder corregir esto en muchos entornos.
fuente
Respuestas:
Ok, un par de cosas
EXEC
al ejecutar procedimientos almacenados; la taquigrafía sinEXEC
solo funciona cuando es la primera instrucción del lote (y ese no será el caso aquí).QUOTENAME()
lugar de aplicar corchetes manualmente usted mismo. En este caso, probablemente esté a salvo, pero hay casos en los que el enfoque manual se romperá.puede probar la
PRINT
salida, pero no necesariamente estará completa si su comando total es> 8k (consulte este consejo para conocer algunos enfoques alternativos ).fuente
sp_help; sp_help;
.Según su pregunta ... que ha eliminado "automatice el mismo script en algunas de las bases de datos de la instancia"
A continuación se muestra el código que lo ayudará.
fuente