2010-11-18 34 views
5

Quiero generar una secuencia de comandos de la tabla de una tabla ya creada en mi base de datos en vivo.Cómo generar una secuencia de comandos de la tabla mediante la consulta SQL en SQL Server

Sé que podemos generar scripts haciendo clic con el botón derecho en la tabla y haciendo clic en el menú 'script table as' y se generará la secuencia de comandos. Porque mi interfaz de usuario de db en vivo está funcionando muy lento.

Quiero hacer el mismo proceso utilizando la consulta SQL. ¿¿hay alguna manera??

+2

Esto se parece a lo que buscas; no es mi respuesta, pero no tiene sentido reinventar la rueda ... http://sqlblogcasts.com/blogs/madhivanan/archive/2007/08/27/generate-sql-script.aspx – nimizen

+0

@nimizen que tiene limitaciones: solo crea el tabla y no crea índices y restricciones, puede hacer esto con 'SELECT top 0 * INTO clon FROM table'. –

Respuesta

3

Si está buscando una solución TSQL, es bastante detallada, como muestra this example.

Una alternativa más corta sería usar el SMO library (example)

(I inicialmente respondieron a esta here, pero SQL-único servidor desarrolladores probablemente no relacionar el título de la pregunta a este problema)

+0

Gracias por la respuesta .. –

2

utilizar esta consulta :

DROP FUNCTION [dbo].[Get_Table_Script] 
Go 

Create Function Get_Table_Script 
(
    @vsTableName varchar(50) 
) 

Returns 
    VarChar(Max) 
With ENCRYPTION 

Begin 

Declare @ScriptCommand varchar(Max) 

Select @ScriptCommand = 
    ' Create Table [' + SO.name + '] (' + o.list + ')' 
    + 
    (
     Case 
     When TC.Constraint_Name IS NULL 
      Then '' 
     Else 'ALTER TABLE ' + SO.Name + ' ADD CONSTRAINT ' + 
      TC.Constraint_Name + ' PRIMARY KEY ' + ' (' + LEFT(j.List, Len(j.List)-1) + ')' 
     End 
    ) 
From sysobjects As SO 
    Cross Apply 

    (
     Select 
      ' [' + column_name + '] ' + 
      data_type + 
      (
       Case data_type 
        When 'sql_variant' 
         Then '' 
        When 'text' 
         Then '' 
        When 'decimal' 
         Then '(' + Cast(numeric_precision_radix As varchar) + ', ' + Cast(numeric_scale As varchar) + ') ' 
        Else Coalesce('(' + 
             Case 
              When character_maximum_length = -1 
               Then 'MAX' 
              Else Cast(character_maximum_length As VarChar) 
             End + ')' , '' 
           ) 
       End 
      ) 
      + ' ' + 
      (
       Case 
        When Exists ( 
            Select id 
            From syscolumns 
            Where 
             (object_name(id) = SO.name) 
             And 
             (name = column_name) 
             And 
             (columnproperty(id,name,'IsIdentity') = 1) 
           ) 
         Then 'IDENTITY(' + 
           Cast(ident_seed(SO.name) As varchar) + ',' + 
           Cast(ident_incr(SO.name) As varchar) + ')' 

        Else '' 

       End 
      ) + ' ' + 

      (
       Case 
        When IS_NULLABLE = 'No' 
         Then 'NOT ' 
        Else '' 
       End 
      ) + 'NULL ' + 
      (
       Case 
        When information_schema.columns.COLUMN_DEFAULT IS NOT NULL 
         Then 'DEFAULT ' + information_schema.columns.COLUMN_DEFAULT 
        ELse '' 
       End 
      ) + ', ' 
     From information_schema.columns 
     Where 
      (table_name = SO.name) 
     Order by ordinal_position 
     FOR XML PATH('')) o (list) 

     Inner Join information_schema.table_constraints As TC On (
                    (TC.Table_name = SO.Name) 
                    AND 
                    (TC.Constraint_Type = 'PRIMARY KEY') 
                    And 
                    (TC.TABLE_NAME = @vsTableName) 
                   ) 
     Cross Apply 
      (
       Select '[' + Column_Name + '], ' 
       From information_schema.key_column_usage As kcu 
       Where 
        (kcu.Constraint_Name = TC.Constraint_Name) 
       Order By ORDINAL_POSITION 
       FOR XML PATH('') 
      ) As j (list) 
Where 
    (xtype = 'U') 
    AND 
    (Name NOT IN ('dtproperties')) 

Return @ScriptCommand 

End 

Y se puede disparar este Function así:

Select [dbo].Get_Table_Script '<Your_Table_Name>' 

Y para crear el uso del disparador esta

SELECT  
DB_NAME() AS DataBaseName,     
dbo.SysObjects.Name AS TriggerName, 
dbo.sysComments.Text AS SqlContent 
FROM 
dbo.SysObjects INNER JOIN 
    dbo.sysComments ON 
    dbo.SysObjects.ID = dbo.sysComments.ID 
WHERE 
(dbo.SysObjects.xType = 'TR') 
AND 
dbo.SysObjects.Name LIKE '<Trigger_Name>' 
+0

fuente de secuencia de comandos? ¿Cuáles son las limitaciones (manejará claves externas, activadores, etc.)? –

+0

@clickstefan: en esta pregunta '@Pankaj Agarwal' desea crear script de tabla.para generar guiones de activación, le enviaré otra respuesta. –

+0

@clickstefan: use este enlace para encontrar todos los triger en la base de datos: http://stackoverflow.com/questions/13200511/how-to-generate-scripts-for-all-triggers-in-database-using-microsoft-sql- server –

3

Para una solución más completa (ish) para generar una declaración CREATE TABLE con índices, activadores y las restricciones probar el stored procedure hecho por Lowell Izaguirre.

Se ha probado y desarrollado desde 2004, última actualización fue en 2013.

También he hecho algunas mejoras a incluir opciones de índice (PAD_INDEX, FILLFACTOR, IGNORE_DUP_KEY):

aquí son los cambios , no puede ajustarse a todo el código, por lo que encontrará la versión completa modificada en http://pastebin.com/LXpBeuN1.


actualización

He hablado con Lowell y una nueva versión pronto estará en línea con los nuevos cambios de opciones sobre índices y otras mejoras.

Cuestiones relacionadas