SQL DDL 生成建表语句(可自动生成主键约束,字段默认值等)

--获取建表DDL(+主键)
declare @tabname varchar(50)
set @tabname='sys_log'--表名
if ( object_id('tempdb.dbo.#t') is not null)
begin
DROP TABLE #t
end
select '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
TABLE_DDL
into #t from sysobjects so
cross apply
(SELECT
' ['+column_name+'] ' +
data_type + case data_type
when 'sql_variant' then ''
when 'text' then ''
when 'ntext' then ''
when 'xml' then ''
when 'decimal' then '(' + cast(numeric_precision 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)
left join
information_schema.table_constraints tc
on tc.Table_name = so.Name
AND tc.Constraint_Type = 'PRIMARY KEY'
cross apply
(select '[' + Column_Name + '], '
FROM information_schema.key_column_usage kcu
WHERE kcu.Constraint_Name = tc.Constraint_Name
ORDER BY
ORDINAL_POSITION
FOR XML PATH('')) j (list)
where xtype = 'U'
AND name=@tabname
select 'USE '+db_name() +CHAR(13) +'GO' + CHAR(13) +
(--区别有主键和没主键
case when (select count(a.constraint_type)
from information_schema.table_constraints a
inner join information_schema.constraint_column_usage b
on a.constraint_name = b.constraint_name
where a.constraint_type = 'PRIMARY KEY'--主键
and a.table_name = @tabname)=1 then
replace(table_ddl,', )ALTER TABLE',')'+CHAR(13)+'ALTER TABLE')
else SUBSTRING(table_ddl,1,len(table_ddl)-3)+')' end
) from #t
--drop table #t
-- SP_HELP sys_log

生成的效果如下:

CREATE TABLE [Sys_Log] (
[LSTime] datetime NOT NULL DEFAULT (getdate()),
[LOptName] char(10) NULL ,
[LOptType] char(12) NULL ,
[LOptObj] char(20) NULL ,
[LDetail] varchar(120) NULL ,
[LStation] tinyint NULL ,
[LCopied] tinyint NULL DEFAULT ('0'),
[VTimeStamp] timestamp NOT NULL
)ALTER TABLE Sys_Log ADD CONSTRAINT PK__Sys_Log__8E0F0ACB1FCDBCEB PRIMARY KEY ([LSTime])

可自动生成主键约束,及默认值

 

posted @   IT情深  阅读(137)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
点击右上角即可分享
微信分享提示