Cree un script SQL que cree bases de datos y tablas

102

Tengo una base de datos SQL y tablas que me gustaría replicar en otro SQL Server. Me gustaría crear un script SQL que cree la base de datos y las tablas en un solo script.

Puedo crear un script "Create" usando SQL Management Studio para cada caso (base de datos y tablas), pero me gustaría saber si combinar los dos scripts "Create" en un solo script sería suficiente.

Gracias.

Tony
fuente
26
¿podría cambiar la respuesta aceptada?
skolima
1
@skolima estuvo de acuerdo, la respuesta aceptada (por Clayton) eventualmente obtendrá el resultado, pero la respuesta de CJM es mucho más rápida
elmer007

Respuestas:

18

En SQL Server Management Studio, puede hacer clic con el botón derecho en la base de datos que desea replicar y seleccionar "Script Database as" para que la herramienta cree el archivo SQL apropiado para replicar esa base de datos en otro servidor. Puede repetir este proceso para cada tabla que desee crear y luego fusionar los archivos en un solo archivo SQL. No olvide agregar una declaración de uso después de crear su base de datos, pero antes de la creación de cualquier tabla.

En versiones más recientes de SQL Server, puede obtener esto en un archivo en SSMS.

  1. Haga clic derecho en una base de datos.
  2. Tareas
  3. Generar guiones

Esto iniciará un asistente donde puede crear un script para toda la base de datos o solo porciones. No parece haber una forma T-SQL de hacer esto.

Generar secuencias de comandos de SQL Server

Clayton
fuente
182
Sigue desplazándote ... el método de CJM es 99,99999% mejor
ewitkows
La respuesta de CJM aún no es suficiente. Después de la aplicación del método de CJM, debe aplicar también el método de Shawna Jacobs.
Andrzej Martyna
De todos modos, ¿esto es SQL estándar para mysql, por ejemplo?
Benjamin Goodacre
378

Aunque la respuesta de Clayton lo llevará allí (eventualmente), en SQL2005 / 2008 / R2 / 2012 tiene una opción mucho más fácil:

Haga clic con el botón derecho en la base de datos, seleccione Tasksy luego Generate Scripts, que iniciará el Asistente de secuencia de comandos. Esto le permite generar un único script que puede recrear la base de datos completa, incluida la tabla / índices y restricciones / procedimientos almacenados / funciones / usuarios / etc. Hay una multitud de opciones que puede configurar para personalizar la salida, pero la mayoría se explica por sí misma.

Si está satisfecho con las opciones predeterminadas, puede hacer todo el trabajo en cuestión de segundos.

Si desea recrear los datos en la base de datos (como una serie de INSERTOS), también recomendaría el paquete de herramientas SSMS (gratis para la versión SQL 2008, pagada por la versión SQL 2012).

CJM
fuente
5
Esto es excelente, acabo de hacer esto y me ahorré un montón de tiempo.
Bill Sambrone
@CJM ¡Estoy pensando que CASI te amo! :-P
Piero Alberto
Seguí esos pasos exactamente, pero todavía obtengo toneladas de errores y no puedo corregirlos. ¿Alguna ayuda?
user1789573
Le sugiero que publique su propia pregunta al respecto; asegúrese de publicar detalles sobre los pasos que siguió y los errores que recibió.
CJM
@ user1789573 - como ha escrito Shawna Jacobs - SSMS no se preocupa por las dependencias (¡lástima de SSMS devteam!) por lo que tendrá toneladas de errores "por diseño". Siga la respuesta de Shawna Jacobs para abordar esta debilidad de SSMS.
Andrzej Martyna
9

Puede encontrar una excelente explicación aquí: Generar script en SQL Server Management Studio

Cortesía de Ali Issa Esto es lo que debe hacer:

  1. Haga clic con el botón derecho en la base de datos (no en la tabla) y seleccione tareas -> generar scripts
  2. Siguiente -> seleccione la tabla / tablas solicitadas (de seleccionar objetos de base de datos específicos)
  3. Siguiente -> haga clic en avanzado -> tipos de datos para script = esquema y datos

Si desea crear un script que solo genere las tablas (sin datos), ¡puede omitir la parte avanzada de las instrucciones!

HolaImKevo
fuente
7

No estoy seguro de por qué SSMS no tiene en cuenta el orden de ejecución, pero simplemente no lo hace. Esto no es un problema para las bases de datos pequeñas, pero ¿qué pasa si su base de datos tiene 200 objetos? En ese caso, el orden de ejecución importa porque no es realmente fácil revisar todos estos.

Para los scripts no ordenados generados por SSMS, puede seguir

a) Ejecutar el script (se insertarán algunos objetos, otros no, habrá algunos errores)

b) Eliminar todos los objetos del script que se han agregado a la base de datos

c) Regrese a a) hasta que finalmente se ejecute todo

La opción alternativa es utilizar una herramienta de terceros como ApexSQL Script o cualquier otra herramienta ya mencionada en este hilo (paquete de herramientas SSMS, Red Gate y otras).

Todos estos se ocuparán de las dependencias por usted y le ahorrarán aún más tiempo.

Shawna Jacobs
fuente
1

Sí, puede agregar tantas instrucciones SQL en un solo script como desee. Solo una cosa a tener en cuenta: el orden importa. No puede INSERTAR en una tabla hasta que la CREA; no puede establecer una clave externa hasta que se inserte la clave principal.

duffymo
fuente