2009-07-21 21 views
85

¿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 secuencias de comandos de la base de datos, pero solo me dio algún tipo de script de alto nivel, ciertamente no un script para crear todas las tablas, procs, udfs, .etc.Base de datos de secuencias de comandos SQL-Server

+0

¿Qué versión de SQL Server? – MyItchyChin

+5

Lo etiquetó SQL Server 2008, así que supongo que eso es lo que está usando. –

+1

¿No se supone que esto debe ir a serverfault.com? – Salamander2007

Respuesta

143

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

Eso debería hacerlo.

+2

Otra opción es usar SQL SMO y programarlo mediante programación (es decir, si se requieren scripts regulares) – RobS

+0

¿Hay alguna manera de configurar un script para hacer esto, de modo que la configuración sea siempre la misma, sin importar quién la ejecute? Preveo que las personas de nuestro equipo de desarrollo sobrescribirán este archivo con configuraciones diferentes cada vez ... –

+0

@Joe, me gustaría ir por 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. –

0

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

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

Esto es en el caso de que generar el script completo de la base de datos desde SQL Server Management Studio es insuficiente.

1

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

4

Escribí una utilidad para esta tarea, SMOscript.

generación de secuencias de comandos se realiza por la biblioteca SMO, y es compatible con los nuevos tipos de objetos en SQL 2005 y 2008.

+0

Hmm Instalé su aplicación smo en mi Vista de 64 bits. Instalar correctamente pero no veo ningún elemento en el directorio de mi programa o en la lista de todos los programas. – PositiveGuy

+0

Es una herramienta de línea de comandos – devio

3

Terminamos con una combinación de la generación del script SSMS para extraer esquema y los datos, y luego usar 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 los scripts solo se apliquen una vez.

¿Por qué?

  • Necesitamos dar soporte a las instalaciones en SQL Server 2000, 2005 y 2008, y hay cambios en los tipos de datos entre las versiones, p. 2005+ tienen nvarchar (max), mientras que 2000 solo admite ntext. Por lo tanto, nuestros scripts usan un token y, en función de la opción db, reemplazan con el tipo correcto.
  • La ejecución de algunos scripts requiere un período de espera después de la ejecución, p. Descubrimos que si no esperaba unos segundos después de crear nuevas bases de datos a través de un script, el servidor SQL podría fallar algunas veces (porque no había tenido tiempo de crear los archivos db) cuando creó tablas, etc.
  • Queríamos mantener un historial de qué scripts se ejecutaron y cuándo.
  • Queríamos permitir que nuestro instalador de Wix MSI especificara la cadena de conexión y las credenciales, y necesitáramos alguna forma de pasarlas a los scripts, una vez más, usando tokens y alguna 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 
11

me escribió una utilidad de línea de comandos de código abierto llamado 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 scripts de esquema y datos.

Para generar secuencias de comandos se ejecutan:

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

A continuación, volver a crear la base de datos de secuencias de comandos ejecutar:

schemazen.exe create --server localhost --database db --scriptDir c:\somedir
+0

Hola, quiero obtener SQL QUERY de mi base de datos local creada en Visual Studio, ¿cómo puedo hacer eso con esto? ¿herramienta? Tengo que usar la dirección del archivo .sdf o ¿cómo? Gracias. –

+0

Es un archivo compacto de SQL DataBase. –

+0

@ KarloA.López SQL Server Compact no es actualmente compatible. Sin embargo, no debería ser demasiado difícil agregar soporte, por lo que si envía una solicitud de función, probablemente se haga bastante rápido. Puede crear una solicitud de función aquí https://github.com/sethreno/schemazen/issues/new –

1

sola observación de los datos de la tabla, para dar salida a todo el contenido de datos de tabla en Management Studio 2012 y 2014, está un poco oculto, pero encontré la opción después de algunos buscando:

  1. Haga clic derecho en el db
  2. Seleccione 'Tareas'> 'generar scripts ...'
  3. En el opciones SET del scripting, haga clic en 'Opciones avanzadas'
  4. bajo 'General' set 'Tipos de datos al script' para cierto (es en la parte inferior del grupo 'General')
Cuestiones relacionadas