SQL Server эквивалентен DBMS_METADATA.GET_DDL - PullRequest
2 голосов
/ 12 ноября 2010

Мне было интересно, есть ли в SQL Server 2008 эквивалент функции Oracle DBMS_METADATA.GET_DDL?Вы можете передать этой функции имя таблицы, и она вернет ddl для этой таблицы, чтобы вы могли использовать ее для создания сценария для схемы.

Я знаю, что могу войти в SSMS и использовать это, ноЯ бы предпочел иметь скрипт t-sql, который бы сгенерировал для меня ddl.

Спасибо,

S

Ответы [ 2 ]

2 голосов
/ 20 января 2015

Я использую этот запрос для создания запроса, но эта работа для 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) + ')'
0 голосов
/ 12 ноября 2010

Если вы ищете решение TSQL, оно довольно многословно, как показывает [этот пример]..

Более короткая альтернатива - использование библиотеки SMO ( пример )

¹ Ссылка для этого примера удалена. Способ, которым Internet Archive Wayback Machine отображал ошибку, говорит о том, что они не могут отображать контент. И по ссылке на оригинал пошло куда-то злое. (Серьезные ошибки, указание позвонить по какому-либо номеру и т. Д.)

...