Segundo plano: algumas de nossas restrições de coluna padrão foram geradas sem nomes explícitos, por isso, temos nomes divertidos que variam de servidor para servidor, como: DF__User__TimeZoneIn__5C4D869D
Eu preferiria que todos fossem gerenciáveis com nomes consistentes, DF_Users_TimeZoneInfo
para que possamos garantir a existência de restrições apropriadas em futuras tabelas de destino (como na comparação do RedGate ou apenas visualmente)
Eu tenho um script que funciona principalmente para o que eu quero:
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[_][_]%'
Mas isso me dá um conjunto de resultados, e não algo que eu possa realmente passar para um executivo ou algo assim.
Como fazer isso para que eu possa executar esses sp_rename
scripts sem ter que recorrer a todos os elementos retornados e colá-los em uma nova janela de consulta e executá-los novamente? Tentando salvar o maior número possível de pressionamentos de tecla, para que eu possa corrigir isso em muitos ambientes.
fonte
Respostas:
Ok, algumas coisas.
EXEC
ao executar procedimentos armazenados; a abreviação semEXEC
funciona apenas quando é a primeira instrução do lote (e não será o caso aqui).QUOTENAME()
vez de aplicar manualmente colchetes. Nesse caso, você provavelmente está seguro, mas há casos em que a abordagem manual será interrompida.você pode testar a
PRINT
saída, mas ela não estará necessariamente completa se o seu comando total for> 8k (veja esta dica para algumas abordagens alternativas ).fonte
sp_help; sp_help;
.Com base na sua pergunta .. que você removeu "automatize o mesmo script em alguns bancos de dados da instância"
Abaixo está o código que o ajudará
fonte