Script de toda la base de datos SQL-Server

95

¿Hay alguna forma de obtener un script de todas las tablas, procesos y otros objetos de una base de datos? Sé que hay una opción para crear un script en la base de datos, pero solo me dio algún tipo de script de nivel superior, ciertamente no un script para crear todas las tablas, procs, udfs, .etc.

PositiveGuy
fuente
6
Lo etiquetó como SQL Server 2008, así que supongo que eso es lo que está usando.
Colin Mackay
1
¿No se supone que debe ir a serverfault.com?
Salamander2007

Respuestas:

162

Desde Management Studio Haga clic derecho en su base de datos. Tareas -> Generar scripts.

Deberias hacer eso.

Chris Brandsma
fuente
2
Otra opción es usar SQL SMO y programarlo mediante programación (es decir, si se requiere un script regular)
RobS
¿Hay alguna forma de configurar un script para hacer esto de modo que la configuración sea siempre la misma sin importar quién lo ejecute? Preveo que la gente de nuestro equipo de desarrollo sobrescribirá este archivo con diferentes configuraciones cada vez ...
Joe Phillips
@ Joe, seguiría la ruta de la que habla RobS. Debería poder hacer eso con PowerShell. De lo contrario, comience a buscar herramientas de RedGate o Visual Studio Team Systems con Database Developer.
Chris Brandsma
7
De forma predeterminada, no escribe los datos. En Opciones de tabla / vista, seleccione "Datos de script -> Verdadero". Otra opción útil es "Script Drop -> True"
Stephen Hosking
1
El script generado no contendrá ninguna información sobre la clasificación de las columnas, a menos que haya elegido la última opción en el menú Extra> Opciones> Generación de script. En alemán, la opción es "Sortierung einschließen". Incluso la mayoría de estas opciones están incluidas en el asistente que genera el script, pero esta no (SQL Server 2008). Realmente tienes que seleccionar la opción antes de llamar al asistente.
Olivier Faucheux
14

Escribí una utilidad de línea de comandos de código abierto llamada SchemaZen que hace esto. Es mucho más rápido que la creación de scripts desde Management Studio y su salida es más amigable con el control de versiones. Admite la creación de scripts tanto de esquema como de datos.

Para generar scripts, ejecute:

script schemazen.exe --server localhost --database db --scriptDir c: \ somedir

Luego, para recrear la base de datos a partir de scripts, ejecute:

schemazen.exe crear --server localhost --database db --scriptDir c: \ somedir
Seth Reno
fuente
Hola, quiero obtener la CONSULTA SQL de mi base de datos local creada en Visual Studio, ¿cómo puedo hacer eso con esta herramienta? Tengo que usar la dirección del archivo .sdf o ¿cómo? Gracias.
Karlo A. López
Es un archivo compacto de base de datos SQL.
Karlo A. López
1
SANTA MIERDA ESTO ES RÁPIDO E IMPRESIONANTE.
ConstantineK
1
@hobs Me alegra que lo hayas encontrado útil. : D
Seth Reno
1
@SethReno índices del sistema corruptos en mi db = SMO no puede escribir nada, tu script puede, así que básicamente me ahorré un montón de tiempo haciendo tonterías manualmente. Por cierto, ingeniería inversa impresionantemente rápida de todo, como 1000 veces más rápido que SSMS y parece más rápido que SMO por sí mismo (sobre todo por el tiempo de inicio).
ConstantineK
4

Escribí una utilidad para esta tarea, SMOscript .

La biblioteca SMO realiza la generación de scripts y admite los nuevos tipos de objetos en SQL 2005 y 2008.

devio
fuente
Hmm, instalé tu aplicación smo en mi Vista de 64 bits. La instalación se realizó correctamente, pero no veo ningún elemento en el directorio de mi programa o en la lista de Todos los programas
PositiveGuy
3

Terminamos usando una combinación de generación de scripts SSMS para extraer esquemas y datos, y luego usamos nuestra propia herramienta de base de datos que permite el análisis de palabras clave y el reemplazo basado en tokens en scripts. También garantiza que las secuencias de comandos solo se apliquen una vez.

¿Por qué?

  • Necesitamos admitir instalaciones en SQL Server 2000, 2005 y 2008, y hay cambios en los tipos de datos entre versiones, por ejemplo, 2005+ tiene nvarchar (max), mientras que 2000 solo admite ntext. Entonces, nuestros scripts usan un token y, según la elección de la base de datos, lo reemplazan con el tipo correcto.
  • La ejecución de algunos scripts requiere un período de espera después de la ejecución, por ejemplo, descubrimos que si no esperaba unos segundos después de crear una nueva base de datos a través de un script, SQL Server podría fallar a veces (porque no ha tenido tiempo de crear el db archivos) cuando pasó a crear tablas, etc.
  • Queríamos mantener un historial de qué scripts se ejecutaron y cuándo.
  • Queríamos permitir que nuestro instalador Wix MSI especificara la cadena de conexión y las credenciales, y necesitábamos alguna forma de pasarlas a los scripts, así que una vez más, usando tokens y algo de lógica condicional.

Script de ejemplo (editado por brevedad)

-- 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
fuente
1

Recomiendo mirar el empaquetador SQL de RedGate. No es gratis, pero ha sido lo suficientemente útil como para valer el precio.

Barry Hurt
fuente
1

Con solo mirar los datos de la tabla, para generar todo el contenido de datos de la tabla en Management Studio 2012 y 2014, está un poco oculto, pero encontré la opción después de buscar:

  1. Haga clic derecho en la base de datos
  2. Seleccione 'Tareas'> 'Generar secuencias de comandos ...'
  3. En 'Establecer opciones de secuencias de comandos', haga clic en 'Avanzado'
  4. En 'General', establezca 'Tipos de datos para secuencia de comandos' en verdadero (está en la parte inferior del grupo 'General')
Cameron adelante
fuente
0

Si necesita hacerlo mediante programación, puede usar la biblioteca SQL DMO (OLE) contra SQL Server 2000, pero es más probable que desee usar la biblioteca SQL SMO (bibliotecas nativas .NET) contra SQL Server 2005 y posteriores.

Ambas bibliotecas son parte integral de la instalación de herramientas administrativas de SQL Server.

Esto es en el caso de que la generación del script de base de datos completo desde SQL Server Management Studio sea insuficiente.

polígloto
fuente