SQL Server 2014, edição padrão
Vimos e usamos, ao longo dos anos, uma variedade de sprocs e ferramentas não MS para exportar o esquema de banco de dados.
A maneira como realmente gostamos de fazer isso é o utilitário integrado, no SSMS, conforme descrito aqui no SO: https://stackoverflow.com/a/12036513/147637
Preferimos fortemente a ferramenta MS, porque é mais completa do que as ferramentas enroladas à mão e fornece uma saída super limpa, organizada e estruturada.
No entanto, queremos automatizar isso.
Como o mecanismo MS pode ser acionado programaticamente?
Hoje em dia, de longe, a melhor maneira é de código aberto e da Microsoft (em que mundo vivemos):
mssql-scripter
O README diz tudo, então vou apenas citá-lo:
Para automação, você provavelmente seria melhor atendido usando o SQL Server Management Objects (SMO) . Isso exigirá um pouco de programação, mas foi projetado para facilitar a navegação no banco de dados/estrutura SQL. Muitas pessoas o usam para gerar scripts como este.
O SSMS não foi projetado para automação. E mesmo que você consiga fazer parte disso de uma maneira um tanto automatizada, provavelmente não há garantia de que essas definições de configuração permaneçam consistentes em computadores ou até mesmo em usuários no mesmo computador. Mas, usando o SMO (mencionado acima), você tem controle total e pode automatizá-lo facilmente e configurá-lo codificando as configurações ou tornando-o mais flexível colocando algumas/todas as configurações em um arquivo app.config.
Alguns exemplos de programação SMO são:
Isso pode ser feito por meio de objetos SMO. Abaixo está um exemplo disso usando C#. Isso usa tabelas, mas pode ser feito para exibições, procedimentos armazenados, etc. alterando o
Table
objeto paraView
,StoredProcedure
ou qualquer outro objeto que você deseja criar script. Você pode usar aName
propriedade para filtrar por nome como no comentário abaixo. Outra opção é oString.StartsWith
método deName
obter apenas objetos com nomes que começam com um determinado texto, ou seja,Name.StartsWith("Prefix")
. DDL é gravado em arquivos .sql que podem ser executados ou usados para outros propósitos. Se você quiser automatizar isso, crie um pacote SSIS que contenha uma tarefa de script com esse código. Você pode agendar o pacote para ser executado como um trabalho usando o SQL Agent. Referências aMicrosoft.SqlServer.Smo
,Microsoft.SqlServer.Management.Sdk.Sfc
eMicrosoft.SqlServer.ConnectionInfo
dlls também serão necessárias.