如何在 SQL Server 中使用 SQL 查询生成表的创建脚本

问题描述 投票:0回答:4

我想在我的实时数据库中生成已创建表的创建表脚本。

我知道我们可以通过右键单击表并单击“脚本表作为”菜单来生成脚本,然后将生成脚本。因为我的实时数据库用户界面运行非常慢。

我想使用 SQL 查询执行相同的过程。有什么办法吗??

sql-server-2005
4个回答
3
投票

如果您正在寻找 TSQL 解决方案,它会非常冗长,如此示例所示。

更短的替代方案是使用 SMO 库example

(我最初在 here 回答了这个问题,但是 SQL Server-only 开发人员可能不会将问题标题与这个问题联系起来)


3
投票

有关生成带有索引、触发器和约束的

CREATE TABLE
语句的更完整(-ish)解决方案,请尝试 Lowell Izaguirre 制作的存储过程

自2004年开始测试和开发,最后一次更新是在2013年。

我还做了一些改进,包括索引选项(

PAD_INDEX
FILLFACTOR
IGNORE_DUP_KEY
):

这里是更改,无法容纳所有代码,因此您可以在 http://pastebin.com/LXpBeuN1 找到完整的修改版本。


更新

我已经和洛厄尔谈过了,新版本很快就会上线,包括索引选项的新变化和其他改进。


2
投票

使用这个查询:

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

你可以像这样解雇这个

Function

Select [dbo].Get_Table_Script '<Your_Table_Name>'

创建触发器使用这个

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>'

-6
投票

开始 | v 下载并安装 Lazada 应用程序或访问 www.lazada.co.id | v 创建一个 Lazada 帐户 | v 使用搜索栏搜索所需的产品 | v 检查产品信息,如描述、规格、细节和推荐 | v 如果有任何问题,请使用“提问”按钮询问卖家 | v 如果一切都清楚,请单击“立即购买” | v 添加完整地址和有效电话号码 | v 在“送货选项”部分选择送货/快递服务 | v 选择快递服务后点击“下单” | v 选择一种付款方式,例如银行转账、OVO、DANA、Alfamart 或 Indomaret | v 获取支付码 | v 完成支付流程 | v 订单状态将更改为“已付款” | v 收到产品并检查 | v 结束

© www.soinside.com 2019 - 2024. All rights reserved.