Sql server 2005 如何在SQLServer中使用SQL查询生成表的创建脚本
我想为我的实时数据库中已经创建的表生成创建表脚本 我知道我们可以使用右键点击表格并点击“ScriptTableAs”菜单生成脚本,脚本将被生成。因为我的live db UI运行得非常慢Sql server 2005 如何在SQLServer中使用SQL查询生成表的创建脚本,sql-server-2005,Sql Server 2005,我想为我的实时数据库中已经创建的表生成创建表脚本 我知道我们可以使用右键点击表格并点击“ScriptTableAs”菜单生成脚本,脚本将被生成。因为我的live db UI运行得非常慢 我想使用SQL查询执行相同的过程。有没有办法???如果您正在寻找一个TSQL解决方案,它非常详细,如图所示 较短的备选方案是使用() (我最初回答了这个问题,但仅SQL Server开发人员可能不会将问题标题与此问题联系起来)使用此查询: DROP FUNCTION [dbo].[Get_Table_Script
我想使用SQL查询执行相同的过程。有没有办法???如果您正在寻找一个TSQL解决方案,它非常详细,如图所示 较短的备选方案是使用() (我最初回答了这个问题,但仅SQL Server开发人员可能不会将问题标题与此问题联系起来)使用此查询:
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
您可以按如下方式启动此函数
:
Select [dbo].Get_Table_Script '<Your_Table_Name>'
选择[dbo]。获取表脚本“”
对于创建触发器,请使用此
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>'
选择
DB_NAME()作为数据库名,
dbo.SysObjects.Name作为TriggerName,
dbo.sysComments.Text作为SqlContent
从…起
dbo.SysObjects内部联接
上的dbo.sysComments
dbo.SysObjects.ID=dbo.sysComments.ID
哪里
(dbo.SysObjects.xType='TR')
及
dbo.SysObjects.Name类似于“”
有关生成包含索引、触发器和约束的CREATE TABLE
语句的更完整(-ish)解决方案,请尝试Lowell Izaguirre制作的
它自2004年开始测试和开发,最后一次更新是在2013年
我还对索引选项做了一些改进(PAD\u index
,FILLFACTOR
,忽略重复键
):
以下是更改,无法容纳所有代码,因此您可以在中找到完整的修改版本
更新
我已经和Lowell谈过了,新版本很快就会上线,其中包括索引选项的新更改和其他改进。这看起来像是您想要的;不是我的答案,但没有必要重新发明轮子@nimizen有一些限制:它只创建表,不创建索引和约束,您可以使用
选择top 0*从表中克隆。脚本源代码?有哪些限制(它会处理外键、触发器等)?@clickstefan:在这个问题中@Pankaj Agarwal
想要创建表脚本。对于生成触发器脚本,我将发送另一个答案。@clickstefan:使用此链接查找数据库中的所有触发器:是的,'script table as'选项将只提供创建表和约束,一个完整的DLL应该包含所有这些,因为它是与表相关的(触发器)。从我可以看出,它缺少对(例如:PAD_INDEX、FILLFACTOR、IGNORE_DUP_KEY等)的支持。