300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > SQL DDL 生成建表语句(可自动生成主键约束 字段默认值等)

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

时间:2022-01-12 15:41:28

相关推荐

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

--获取建表DDL(+主键)declare @tabname varchar(50)set @tabname='sys_log'--表名if ( object_id('tempdb.dbo.#t') is not null)beginDROP TABLE #tendselect '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_DDLinto #t from sysobjects socross apply(SELECT ' ['+column_name+'] ' + data_type + case data_typewhen '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 syscolumnswhere object_name(id)=so.nameand name=column_nameand 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.nameorder by ordinal_positionFOR XML PATH('')) o (list)left joininformation_schema.table_constraints tcon tc.Table_name = so.NameAND tc.Constraint_Type = 'PRIMARY KEY'cross apply(select '[' + Column_Name + '], 'FROM information_schema.key_column_usage kcuWHERE kcu.Constraint_Name = tc.Constraint_NameORDER BYORDINAL_POSITIONFOR XML PATH('')) j (list)where xtype = 'U'AND name=@tabnameselect '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 bon a.constraint_name = b.constraint_namewhere a.constraint_type = 'PRIMARY KEY'--主键 and a.table_name = @tabname)=1 thenreplace(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])

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。