2010-11-12 4 views
2

Je me demandais s'il existe un équivalent dans SQL Server 2008 à la fonction DBMS_METADATA.GET_DDL d'Oracle? Vous pouvez passer cette fonction un nom de table et il retournera le ddl pour cette table afin que vous puissiez l'utiliser pour construire un script pour un schéma. Je sais que je peux aller dans SSMS et l'utiliser, mais je préférerais avoir un script t-sql qui générerait le ddl pour moi.SQL Server équivalent à DBMS_METADATA.GET_DDL

Merci,

S

+3

double possible de [Dans SQL Server, comment puis-je générer un Instruction CREATE TABLE pour une table donnée?] (Http://stackoverflow.com/questions/21547/in-sql-server-how-do-i-generate-a-create-table-statement-for-a-given- table) –

+0

Du corps du texte, "... un nom de table ... renvoie le ddl pour cette table." semble être un doublon de http://stackoverflow.com/questions/21547/in-sql-server-how-do-i-generate-a-create-table-statement-for-a-given-table Couvre ce cas . –

Répondre

0

Si vous êtes à la recherche d'une solution TSQL, il est tout à fait bavard, comme [cet exemple] ¹ montre.

Une alternative plus courte serait d'utiliser le SMO library (example)

¹ Lien pour cet exemple supprimé. La façon dont Internet Archive Wayback Machine a affiché une erreur indiquant qu'ils ne pouvaient pas afficher le contenu. Et en suivant le lien vers l'original est allé quelque part malveillant. (Erreurs graves, l'instruction d'appeler un certain nombre, etc.)

+3

Vous devez mettre à jour les liens. – Arbaaz

+0

Deux des trois liens sont mauvais maintenant. Et cette réponse n'avait aucune valeur en dehors de ses liens pour commencer. –

2

cette requête, je l'aide pour générer des requêtes, mais ce travail pour 1 table:

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) + ')' 
Questions connexes