How to generate create script of table using SQL query in SQL Server

后端 未结 3 831
心在旅途
心在旅途 2020-12-16 05:54

I want to generate create table script of already created table in my live database.

I know we can generate scripts using right click on table and click on \'script

相关标签:
3条回答
  • 2020-12-16 06:39

    For a more complete(-ish) solution for generating a CREATE TABLE statement with indexes, triggers and constraints try the stored procedure made by Lowell Izaguirre.

    It has been tested and developed since 2004, last update was in 2013.

    I've also made some improvements to include index options (PAD_INDEX, FILLFACTOR, IGNORE_DUP_KEY):

    here are the changes, can't fit all the code so you'll find the complete modified version at http://pastebin.com/LXpBeuN1 .


    Update

    I've talked with Lowell and a new version will be online soon with the new changes for index options and other improvements.

    0 讨论(0)
  • 2020-12-16 06:47

    Use this query :

    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
    

    And you can fire this Function like this :

    Select [dbo].Get_Table_Script '<Your_Table_Name>'
    

    And for create trigger use this

    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 讨论(0)
  • 2020-12-16 06:51

    If you are looking for a TSQL solution, it is quite verbose, as this example shows.

    A shorter alternative would be using the SMO library (example)

    (I originally answered this here, but SQL Server-only devs probably do not relate the question title to this problem)

    0 讨论(0)
提交回复
热议问题