SQL Server 2012: Gerar scripts a partir da linha de comando

19

Estou executando o SQL Server 2012.

O SQL Server Management Studio tem a opção de clicar com o botão direito do mouse em um banco de dados e selecionar Tarefas e Gerar scripts.

Existe uma maneira de automatizar isso via linha de comando de alguma forma?

Quero criar um script que inclua o esquema e os dados de toda a base de dados.

Ferramentas como o ScriptDBe sqlpubwiz.exetodos parecem alvo SQL Server 2005. O que sobre o SQL Server 2012?

Harald
fonte

Respostas:

20

O melhor é usar o Powershell - se você o usará com frequência. Você pode consultar a geração automatizada de scripts com o Powershell e o SMO .

Além disso, as SQL Server PowerShell Extensions (SQLPSX) são de grande valor ao trabalhar com o Powershell. Todos os módulos estão tendo arquivos de ajuda, por exemplo, Get-SqlScripter .

Get-SqlDatabase -dbname database1 -sqlserver server | Get-SqlTable | Get-SqlScripter | Set-Content -Path D:\scripts\script.sql
Get-SqlDatabase -dbname database1 -sqlserver server | Get-SqlStoredProcedure | Get-SqlScripter
Get-SqlDatabase -dbname database1 -sqlserver server | Get-SqlView | Get-SqlScripter

Para ferramentas de terceiros, é altamente recomendável dar uma olhada (existem muitas ferramentas de terceiros por aí, mas abaixo das que eu usei e elas são ótimas):

Kin Shah
fonte
9

Eu escrevi um utilitário de linha de comando de código aberto chamado SchemaZen que faz isso. É muito mais rápido que o script do estúdio de gerenciamento e sua saída é mais amigável ao controle de versão. Ele suporta scripts de esquema e dados.

Para gerar scripts, execute:

script schemazen.exe - servidor localhost - banco de dados db --scriptDir c: \ somedir

Em seguida, para recriar o banco de dados a partir dos scripts, execute:

schemazen.exe create --server localhost --database db --scriptDir c: \ somedir
Seth Reno
fonte
9

Tara Raj da Microsoft anunciou recentemente que a equipe do Microsoft SQL lançou um conjunto de ferramentas de linha de comando para gerar scripts T-SQL que parecem fazer exatamente o que você pediu:

mssql-scripter

Mssql-scripter é o equivalente em linha de comando multiplataforma da experiência amplamente usada do Assistente para Gerar Scripts no SSMS.

Você pode usar o mssql-scripter no Linux, macOS e Windows para gerar scripts T-SQL da linguagem de definição de dados (DDL) e da linguagem de manipulação de dados (DML) para objetos de banco de dados no SQL Server em execução em qualquer lugar, no Banco de Dados SQL do Azure e no SQL Data Warehouse do Azure . Você pode salvar o script T-SQL gerado em um arquivo .sql ou canalizá-lo para utilitários padrão * nix (por exemplo, sed, awk, grep) para futuras transformações. Você pode editar o script gerado ou verificá-lo no controle de origem e subsequentemente executar o script nos processos de implantação de banco de dados SQL existentes e nos pipelines do DevOps com as ferramentas de linha de comando SQL multiplataforma padrão, como o sqlcmd.

O Mssql-scripter é criado usando Python e incorpora os princípios de usabilidade das novas ferramentas da CLI 2.0 do Azure. O código fonte pode ser encontrado no Github em https://github.com/Microsoft/sql-xplat-cli , e agradecemos suas contribuições e solicitações de recebimento!

Alguns exemplos de uso:

Gere scripts DDL para todos os objetos de banco de dados (padrão) no banco de dados Adventureworks e envie para stdout

$ mssql-scripter -S localhost -d AdventureWorks -U sa

Gere scripts DDL para todos os objetos de banco de dados e scripts DML (instruções INSERT) para todas as tabelas no banco de dados Adventureworks e salve o script em um arquivo

$ mssql-scripter -S localhost -d AdventureWorks -U sa schema-and-data  > ./output.sql
BradC
fonte
0

Você pode usar as versões de linha de comando do xSQL Schema Compare e do xSQL Data Compare . Com as versões da linha de comando, você pode agendar comparações periódicas de dados e esquemas com um banco de dados vazio e isso sempre possui os scripts para criar uma réplica exata da versão mais recente do seu banco de dados do zero.

Divulgação: sou afiliado ao xSQL.

Endi Zhupani
fonte
0

Apenas uma atualização: nas versões atuais dos módulos do PowerShell do SQL Server (SQL Server 2014 e diante, eu acreditava. Testado no SSMS 17), a maioria dessas opções são comandos e métodos nativos.

Por exemplo, você pode usar Get-SqlDatabase e métodos como .Script () e .EnumScript (). É realmente útil e simples, especialmente se você deseja uma abordagem mais granular (tabelas específicas e outros objetos).

Por exemplo, isso irá gerar scripts CREATE para funções definidas pelo usuário e salvá-lo no arquivo:

$Database = Get-SqlDatabase -ServerInstance $YourSqlServer -Name $YourDatabaseName

$MyFuncs = $Database.UserDefinedFunctions | Where Schema -eq "dbo"
$MyFuncs.Script() | Out-File -FilePath ".\SqlScripts\MyFunctions.sql"

Se você deseja criar scripts de dados e elementos como índices, chaves, gatilhos, etc., precisará especificar opções de script, como estas:

$scriptOptions = New-Object -TypeName Microsoft.SqlServer.Management.Smo.ScriptingOptions

$scriptOptions.NoCollation = $True
$scriptOptions.Indexes = $True
$scriptOptions.Triggers = $True
$scriptOptions.DriAll = $True
$scriptOptions.ScriptData = $True

$Database.Tables.EnumScript($scriptOptions) | Out-File -FilePath ".\AllMyTables.sql"

Observe que o método Script () não suporta dados de script. Use EnumScript () para tabelas.

Uma única tabela :

($Database.Tables | Where Name -eq "MyTableName").EnumScript($scriptOptions)

Todas as suas visualizações, salve um arquivo por cada visualização, script DROP e CREATE:

ForEach ($view in $($Database.Views | Where Schema -eq "dbo")) {

    "`nIF OBJECT_ID('$($view.Name)') IS NOT NULL DROP VIEW $($view.Name);`n`n" | Out-File -FilePath ".\SqlScripts\$($view.Name).sql"    
    $view.Script() | Out-File -FilePath ".\SqlScripts\$($view.Name).sql" -Append
}

Espero que isto ajude.

Victor Lopes
fonte