Script de banco de dados SQL-Server inteiro

95

Existe uma maneira de obter um script de todas as tabelas, procs e outros objetos de um banco de dados? Eu sei que há uma opção para fazer o script do banco de dados, mas isso só me deu algum tipo de script de nível superior, certamente não um script para criar todas as tabelas, procs, udfs, .etc.

PositiveGuy
fonte
6
Ele o etiquetou como SQL Server 2008, então presumo que seja isso que ele está usando.
Colin Mackay
1
Isso não deveria ir para serverfault.com?
Salamander2007

Respostas:

162

No Management Studio, clique com o botão direito em seu banco de dados. Tarefas -> Gerar Scripts.

Isso deve resolver.

Chris Brandsma
fonte
2
Outra opção é usar SQL SMO e criar um script de forma programática (ou seja, se o script regular for necessário)
RobS de
Existe uma maneira de configurar um script para fazer isso de forma que as configurações sejam sempre as mesmas, não importa quem o executa? Prevejo pessoas em nossa equipe de desenvolvimento substituindo este arquivo com configurações diferentes a cada vez ...
Joe Phillips
@Joe, gostaria de seguir o caminho que o RobS está falando. Você deve ser capaz de fazer isso com o PowerShell. Caso contrário, comece a olhar para as ferramentas RedGate ou Visual Studio Team Systems com Database Developer.
Chris Brandsma
7
Por padrão, ele não faz o script dos dados. Em Opções de tabela / exibição, selecione "Dados de script -> Verdadeiro". Outra opção útil é "Script Drop -> True"
Stephen Hosking
1
O script gerado não conterá nenhuma informação sobre o agrupamento das colunas, a menos que você tenha escolhido a última opção no menu Extra> Opções> Geração de script. Em alemão, a opção é "Sortierung einschließen". Mesmo a maioria dessas opções estão incluídas no assistente que gera o script, esta não (SQL Server 2008). Você realmente precisa selecionar a opção antes de chamar o assistente.
Olivier Faucheux
14

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

Para gerar scripts, execute:

script schemazen.exe --server localhost --database 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
Olá, quero obter o SQL QUERY do meu banco de dados local criado no Visual Studio. Como posso fazer isso com essa ferramenta? Eu tenho que usar a direção do arquivo .sdf ou como? obrigado.
Karlo A. López,
É um arquivo SQL DataBase compacto.
Karlo A. López,
1
HOLY CRAP ISTO É RÁPIDO E INCRÍVEL.
ConstantineK
1
@hobs Estou feliz que você achou útil. : D
Seth Reno
1
@SethReno corromper os índices sys no meu db = SMO não consegue fazer script de nada, seu script consegue, então basicamente me economizou muito tempo fazendo uma porcaria manual. BTW, engenharia reversa impressionantemente rápida de tudo, como 1000x mais rápido do que o SSMS e parece mais rápido do que o SMO por si só (principalmente por causa do tempo de inicialização).
ConstantineK
4

Escrevi um utilitário para essa tarefa, SMOscript .

A geração de scripts é realizada pela biblioteca SMO e oferece suporte aos novos tipos de objeto no SQL 2005 e 2008.

Devio
fonte
Hmm, eu instalei seu aplicativo smo no meu Vista de 64 bits. Instalação bem-sucedida, mas não vejo nenhum item no diretório do meu programa ou na lista Todos os programas
PositiveGuy
3

Acabamos usando uma combinação de geração de script SSMS para extrair esquema e dados e, em seguida, usar nossa própria ferramenta de banco de dados que permite análise de palavras-chave e substituição baseada em token em scripts. Também garante que os scripts sejam aplicados apenas uma vez.

Por quê?

  • Precisamos oferecer suporte a instalações no SQL Server 2000, 2005 e 2008, e há alterações nos tipos de dados entre as versões, por exemplo, 2005+ tem nvarchar (max), enquanto 2000 oferece suporte apenas a ntext. Portanto, nossos scripts usam um token e, com base na escolha do banco de dados, são substituídos pelo tipo correto.
  • A execução de alguns scripts requer um período de espera após a execução, por exemplo: Descobrimos que se você não esperou alguns segundos após criar um novo banco de dados por meio de um script, o SQL Server pode falhar às vezes (porque não teve tempo para criar o banco de dados arquivos) quando passou a criar tabelas, etc.
  • Queríamos manter um histórico de quais scripts foram executados e quando.
  • Queríamos permitir que nosso instalador Wix MSI especificasse a string de conexão e as credenciais, e precisávamos de alguma forma para passá-los para os scripts, então, mais uma vez, usando tokens e alguma lógica condicional.

Script de exemplo (editado por questões de brevidade)

-- Sleep: 5 
-- Sleep after creating database to allow file system to create db files
CREATE DATABASE [$Database$]
GO

EXEC sp_dbcmptlevel [$Database$], $CompatabilityLevel$
GO

USE [$Database$]
GO

IF '1'!='$IntegratedSecurity$'
BEGIN
    CREATE LOGIN [$Login$] WITH PASSWORD=N'$Password$', DEFAULT_DATABASE=[$Database$]
    CREATE USER [$User$] FOR LOGIN [$Login$]
    EXEC sp_addrolemember N'db_owner', N'$User$'
END
GO
si618
fonte
1

Eu recomendo olhar o empacotador RedGate SQL. Não é grátis, mas foi útil o suficiente para valer o preço.

Barry Hurt
fonte
1

Apenas olhando os dados da tabela, para produzir todo o conteúdo de dados da tabela no Management Studio 2012 e 2014, está um pouco oculto, mas encontrei a opção depois de olhar:

  1. Clique com o botão direito no banco de dados
  2. Selecione 'Tarefas'> 'Gerar Scripts ...'
  3. Em 'Definir opções de script', clique em 'Avançado'
  4. Em 'Geral', defina 'Tipos de dados para script' como verdadeiro (está na parte inferior do grupo 'Geral')
Cameron Forward
fonte
0

Se precisar fazer isso programaticamente, você pode usar a biblioteca SQL DMO (OLE) no SQL Server 2000, mas é mais provável que você queira usar a biblioteca SQL SMO (bibliotecas .NET nativas) no SQL Server 2005 e posterior.

Essas duas bibliotecas são essenciais para a instalação das ferramentas administrativas do SQL Server.

Isso ocorre no caso de a geração do script de banco de dados completo a partir do SQL Server Management Studio ser insuficiente.

poliglota
fonte