SQL Server等同于DBMS_METADATA.GET_DDL

时间:2010-11-12 18:57:12

标签: sql-server sql-server-2005 sql-server-2008

我想知道SQL Server 2008中是否存在与Oracle的DBMS_METADATA.GET_DDL函数相同的内容?您可以将此函数传递给表名,它将返回该表的ddl,以便您可以使用它为架构构建脚本。

我知道我可以进入SSMS并使用它,但我更希望有一个t-sql脚本来为我生成ddl。

谢谢,

取值

2 个答案:

答案 0 :(得分:2)

我使用此查询生成查询,但这适用于1个表:

declare @vsSQL varchar(8000)
declare @vsTableName varchar(50)
select @vsTableName = 'Customers'

select @vsSQL = 'CREATE TABLE ' + @vsTableName + char(10) + '(' + char(10)

select @vsSQL = @vsSQL + ' ' + sc.Name + ' ' +
st.Name +
case when st.Name in ('varchar','varchar','char','nchar') then '(' + cast(sc.Length as varchar) + ') ' else ' ' end +
case when sc.IsNullable = 1 then 'NULL' else 'NOT NULL' end + ',' + char(10)
from sysobjects so
join syscolumns sc on sc.id = so.id
join systypes st on st.xusertype = sc.xusertype
where so.name = @vsTableName
order by
sc.ColID

select substring(@vsSQL,1,len(@vsSQL) - 2) + char(10) + ')'

答案 1 :(得分:0)

如果您正在寻找TSQL解决方案,那就非常详细了,正如[本例]¹所示。

较短的替代方案是使用SMO libraryexample

¹删除此示例的链接。 Internet Archive Wayback Machine显示错误的方式表明他们无法显示内容。并且跟随原始链接到某个地方恶意。 (严重错误,拨打某些号码的指示等)