locked
Es posible copiar la estructura de una base de datos existente?

    Question

  • Estoy queriendo copiar la estructura de una base de datos que utilizare como modelo, pero hasta ahora no he encontrado informcion suficiente como para lograrlo, ya que trataba de hacerlo desde VB.Net pero si no aunque sea desde SQL Server 2005 y ejecutaria desde mi app el script que me indicaran.

    Muchas Gracias.
    Sunday, February 14, 2010 7:24 PM

Answers

  • Hola.

    Efectivamente, desde un procedimiento almacenado no puedes ejecutar directamente un "use". Pero hay otras alternativas. La más evidente, ya que estás metido con PowerShell, utiliza sqlcmd para ejecutar tu script previamente guardado desde tu aplicación (y que incluya el "use" si quieres o directamente se posicione en esa base de datos por la cadena de conexión):


    Otra idea sería que construyeras un procedimiento almacenado que ejecutara sp_executesql o directamente exec ('MiScript'). Tendrías la limitación del tamaño del script, que seguramente sería un problema.

    Sin duda, yo optaría por lo primero.


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    Wednesday, February 17, 2010 7:51 AM

All replies

  • Hola.

    Para generar scripts con Management Studio, tienes un asistente. Te paso el link sobre cómo utilizarlo:


    Sobre cómo conseguirlo desde otra aplicación, tienes la opción de hacerlo con SMO. Te paso un ejemplo (aunque está en C# seguramente puedas "traducirlo" a VB.Net):


    Si no te vale, nos dices.


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    Sunday, February 14, 2010 9:01 PM
  • Gracias por responder pero la verdad no me funciona el codigo, me dice que falta algo relacionado con ssis pero yo estoy utilizando sql express no se si hay alguna forma de ejecutar el script que me crea el managment studio con todas las tablas de la base de datos que seleccione y ese script asignarselo a la nueva base de datos que cree.

    ya que eso si puedo hacer crear la bd desde VB.NET.


    Tuesday, February 16, 2010 2:10 AM
  • Hola.

    En cuanto al error de código, indicanos el mensaje de error exacto que recibes. Sin ser éste un foro dedicado a la programación, seguramente alguno podamos echarte un cable con ello.

    Sobre el script que has generado, depende de las opciones que hayas elegido. Puede que hayas creado la base de datos, que hayas incluido borrado de los objetos, depende. Puede ser peligroso que lo ejecutes directamente sobre su servidor si no tienes la certeza de saber exactamente qué hace el script, ya que podrías perder algún objeto. Por lo que comentas, incluye la creación de unas pocas tablas, con lo que tendrías que crear una base de datos nueva y ejecutar ese script sobre la nueva base de datos.

    De todos modos, si tienes dudas, pásanos el script, a ver qué pinta tiene.


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    Tuesday, February 16, 2010 7:41 AM
  • El error es bien grande pero lo que mas se puede destacar es que dice el componente
    integration services no esta instalado o no tiene permiso de utilizarlo.

    las pruebas las estoy haciendo en xp profesional en español.

    es sqlexpress 2005


     // Configurar las Opciones de la transaccion
                    Transfer t = new Transfer(db);
                    t.CopyAllObjects = true;                 // Todas las tablas
                    t.DropDestinationObjectsFirst = true;    // Si existe la BD, limpiarla
                    t.CopySchema = true;                     // Copiar estructura
                    if (checkBox1.Checked) t.CopyData = true;// Copiar datos
                    t.DestinationServer = @".\SQLEXPRESS";   // Servidor donde se creara la Copia
                    t.DestinationDatabase = textBox1.Text;   // Nombre de la Copia
                    t.Options.IncludeIfNotExists = true;     // Crear la BD si no existe
                    t.Options.DriAllKeys = true;             // Copiar las Llaves
                    t.Options.DriForeignKeys = true;         // Llaves foraneas
                    t.Options.DriPrimaryKey = true;          // Llaves primarias
                    t.Options.DriUniqueKeys = true;          // Llaves unicas

                    // Realizar la transaccion
                    t.TransferData();

    ese es el codigo 

    el programa da error al llegar a la fila  
             // Realizar la transaccion
                    t.TransferData();

    Tuesday, February 16, 2010 10:26 PM
  • Hola.

    Creo que hemos estado hablando de dos cosas diferentes. Yo me refería a la estructura de las tablas y tú a los datos de las mismas. Yo hablaba de la generación de scripts con el wizard para ello y tú del Import/Export Wizard. 

    El problema lo tienes en que la edición Express no incluye Integration Services ni los objetos de este motor, que son necesarios para realizar la transferencia de datos.

    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    Tuesday, February 16, 2010 10:45 PM
  • Es correcto, me refiero a la estructura, solo que ese ejemplo sale como copiar todo pero no necesito lo de los datos.

    los datos si se me ocurre como lo haría.

    solo necesito todas las tablas, los procedures, etc.
    Tuesday, February 16, 2010 10:47 PM
  • Para copiar solamente la estructura usted puede hacer lo que Alberto ya le indicó en su primer mensaje. Eso se explica en el primer link que indicó Alberto.

    Lo que usted debe hacer en el Management Studio, en el Explorador de objetos, expanda Bases de datos, haga clic con el botón secundario en una base de datos, seleccione Tareas y, a continuación, haga clic en Generar scripts.

    Los detalles usted los puede leer en los manuales:

    http://msdn.microsoft.com/es-es/library/ms178078.aspx

    Gustavo Larriera Sosa, Microsoft MVP | ascii164.blogspot.com | /*Este mensaje se proporciona tal como es, sin garantías de ninguna clase.*/
    Tuesday, February 16, 2010 10:58 PM
  • Si el script ya lo tengo generado con todas las tablas, ahora la pregunta es como lo genero en la nueva tabla que ya he creado y esta vacía. La idea es generarla desde un procedimiento almacenado donde solo le pasaría por parámetro el nuevo nombre de la base de datos.

    pero si pongo el script dentro del procedimiento no permite que use el comando USE
     ya que le indico USE minuevabd no se si me doy a entender, la necesito en un archivo que se pueda
    ejecutar porque lo quiero hacer desde mi aplicación.

    Gracias!!
    Tuesday, February 16, 2010 11:07 PM
  • Hola.

    Efectivamente, desde un procedimiento almacenado no puedes ejecutar directamente un "use". Pero hay otras alternativas. La más evidente, ya que estás metido con PowerShell, utiliza sqlcmd para ejecutar tu script previamente guardado desde tu aplicación (y que incluya el "use" si quieres o directamente se posicione en esa base de datos por la cadena de conexión):


    Otra idea sería que construyeras un procedimiento almacenado que ejecutara sp_executesql o directamente exec ('MiScript'). Tendrías la limitación del tamaño del script, que seguramente sería un problema.

    Sin duda, yo optaría por lo primero.


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    Wednesday, February 17, 2010 7:51 AM