¿Cómo puedo automatizar la tarea “generar scripts” en SQL Server Management Studio 2008?

Me gustaría automatizar la generación de scripts en SQL Server Management Studio 2008.

En este momento lo que hago es:

  • Haga clic derecho en mi base de datos, Tareas, “Generar scripts …”
  • seleccione manualmente todas las opciones de exportación que necesito, y presione seleccionar todo en la pestaña “seleccionar objeto”
  • Seleccione la carpeta de exportación
  • Finalmente, presiona el botón “Finalizar”

¿Hay alguna manera de automatizar esta tarea?

Editar: Quiero generar scripts de creación , no cambiar scripts.

Lo que Brann menciona de Visual Studio 2008 SP1 Team Suite es la versión 1.4 del Asistente de publicación de bases de datos. Está instalado con el servidor sql 2008 (¿tal vez solo profesional?) En \ Archivos de progtwig \ Microsoft SQL Server \ 90 \ Tools \ Publishing \ 1.4. La llamada VS desde el explorador del servidor simplemente está llamando a esto. Puede lograr la misma funcionalidad a través de la línea de comando como:

sqlpubwiz help script 

No sé si v1.4 tiene los mismos problemas que v1.1 (los usuarios se convierten en roles, las restricciones no se crean en el orden correcto), pero no es una solución para mí porque no crea objetos a diferentes archivos como la opción Tareas-> Generar secuencias de comandos en SSMS. Actualmente estoy usando una versión modificada de Scriptio (utiliza la API MS SMO) para actuar como un reemplazo mejorado para el asistente de publicación de la base de datos (sqlpubwiz.exe). Actualmente no es secuenciable desde la línea de comandos, podría agregar esa contribución en el futuro.

Scriptio se publicó originalmente en el blog de Bill Graziano, pero posteriormente Bill lo ha publicado en CodePlex y otros lo han actualizado. Lea la discusión para ver cómo comstackr para usar con SQL Server 2008.

http://scriptio.codeplex.com/

EDIT: desde entonces comencé a usar el producto SQL Compare de RedGate para hacer esto. Es un reemplazo muy bueno para todo lo que el asistente de publicación sql debería haber sido. Elije una base de datos, una copia de seguridad o una instantánea como origen y una carpeta como la ubicación de salida y vuelve a colocar todo en una estructura de carpetas. Resulta ser el mismo formato que usa su otro producto, SQL Source Control.

SqlPubwiz tiene opciones muy limitadas en comparación con la generación de scripts en SSMS. Por el contrario, las opciones disponibles con SMO coinciden casi exactamente con las de SSMS, lo que sugiere que probablemente sea el mismo código. (¡Espero que MS no lo haya escrito dos veces!) Hay varios ejemplos en MSDN como este que muestran tablas de scripts como objetos individuales. Sin embargo, si desea que todo funcione correctamente con un esquema “completo” que incluya objetos “DRI” (Integridad Referencial Declarativa) como claves externas, entonces las tablas de scripts de forma individual no funcionan las dependencias correctamente. Descubrí que es necesario recolectar todos los URN y entregarlos al scripter como una matriz. Este código, modificado a partir del ejemplo, funciona para mí (aunque me atrevo a decir que podrías arreglarlo y comentarlo un poco más):

 using Microsoft.SqlServer.Management.Smo; using Microsoft.SqlServer.Management.Sdk.Sfc; ... // Connect to the local, default instance of SQL Server. Server srv = new Server(); // Reference the database. Database db = srv.Databases["YOURDBHERE"]; Scripter scrp = new Scripter(srv); scrp.Options.ScriptDrops = false; scrp.Options.WithDependencies = true; scrp.Options.Indexes = true; // To include indexes scrp.Options.DriAllConstraints = true; // to include referential constraints in the script scrp.Options.Triggers = true; scrp.Options.FullTextIndexes = true; scrp.Options.NoCollation = false; scrp.Options.Bindings = true; scrp.Options.IncludeIfNotExists = false; scrp.Options.ScriptBatchTerminator = true; scrp.Options.ExtendedProperties = true; scrp.PrefetchObjects = true; // some sources suggest this may speed things up var urns = new List(); // Iterate through the tables in database and script each one foreach (Table tb in db.Tables) { // check if the table is not a system table if (tb.IsSystemObject == false) { urns.Add(tb.Urn); } } // Iterate through the views in database and script each one. Display the script. foreach (View view in db.Views) { // check if the view is not a system object if (view.IsSystemObject == false) { urns.Add(view.Urn); } } // Iterate through the stored procedures in database and script each one. Display the script. foreach (StoredProcedure sp in db.StoredProcedures) { // check if the procedure is not a system object if (sp.IsSystemObject == false) { urns.Add(sp.Urn); } } StringBuilder builder = new StringBuilder(); System.Collections.Specialized.StringCollection sc = scrp.Script(urns.ToArray()); foreach (string st in sc) { // It seems each string is a sensible batch, and putting GO after it makes it work in tools like SSMS. // Wrapping each string in an 'exec' statement would work better if using SqlCommand to run the script. builder.AppendLine(st); builder.AppendLine("GO"); } return builder.ToString(); 

Escribí una utilidad de línea de comando 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 scripts de esquema y datos.

Para generar scripts, ejecuta:

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

A continuación, para recrear la base de datos desde los scripts ejecutados:

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

Puede usar SQL Server Management Object (SMO) para automatizar tareas de administración de SQL Server 2005, incluida la generación de scripts: http://msdn.microsoft.com/en-us/library/ms162169.aspx .

Si eres un desarrollador, definitivamente ve con SMO. Aquí hay un enlace a la clase Scripter, que es su punto de partida:

Clase Scripter

No veo PowerShell con SQLPSX mencionado en ninguna de estas respuestas … Personalmente no he jugado con él, pero se ve muy simple de usar e ideal para este tipo de tareas de automatización, con tareas como:

 Get-SqlDatabase -dbname test -sqlserver server | Get-SqlTable | Get-SqlScripter | Set-Content -Path C:\script.sql Get-SqlDatabase -dbname test -sqlserver server | Get-SqlStoredProcedure | Get-SqlScripter Get-SqlDatabase -dbname test -sqlserver server | Get-SqlView | Get-SqlScripter 

(ref: http://www.sqlservercentral.com/Forums/Topic1167710-1550-1.aspx#bm1168100 )

Página del proyecto: http://sqlpsx.codeplex.com/

La principal ventaja de este enfoque es que combina la configurabilidad / personalización del uso de SMO directamente, con la conveniencia y facilidad de mantenimiento del uso de una herramienta existente simple como el Asistente de publicación de bases de datos.

En Herramientas> Opciones> Diseñadores> Diseñadores de tablas y bases de datos, hay una opción para “Auto generar scripts de cambios” que generará uno por cada cambio que realice en el momento en que lo guarde.

Puede hacerlo con el código T-SQL utilizando las tablas INFORMATION_SCHEMA.

También hay herramientas de terceros: me gusta Apex SQL Script para el uso preciso del que está hablando. Lo ejecuto completamente desde la línea de comandos.

Si desea una solución de Microsoft, puede intentar: Microsoft SQL Server Database Publishing Wizard 1.1

http://www.microsoft.com/downloads/details.aspx?FamilyId=56E5B1C5-BF17-42E0-A410-371A838E570A&displaylang=en

Crea un proceso por lotes que puede ejecutar en cualquier momento que necesite para reconstruir los scripts.

He estado usando DB Comparer: es un script libre y sin complicaciones, y todo el DB puede compararse con otro DB y también producir un script de Diff. Excelente para los scripts de cambio de Desarrollo a Producción. http://www.dbcomparer.com/

También existe esta sencilla herramienta de línea de comando que construyo para mis necesidades.
http://mycodepad.wordpress.com/2013/11/18/export-ms-sql-database-schema-with-c/

Puede exportar un db completo e intenta exportar objetos cifrados. Todo está almacenado en carpetas y archivos sql separados para una fácil comparación de archivos.

El código también está disponible en github.

Desde Visual Studio 2008 SP1 TeamSuite:

En la pestaña Server Explorer / Data Connections, hay una herramienta de publicación en proveedor que hace lo mismo que “Asistente de publicación de base de datos Microsoft SQL Server”, pero que es compatible con MS Sql Server 2008.

Estoy usando VS 2012 (para DBs en MSSQL Server 2008) comparar base de datos tiene una opción para guardarlo, la comparación y las opciones. Esto es esencialmente lo que son sus configuraciones para la entrega. Después de eso puedes actualizar o generar script.

Me parece un poco incómodo cargarlo desde el archivo más tarde (arrastrar y soltar desde el explorador de Windows) ya que no veo el archivo en el explorador de soluciones.