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])
可自动生成主键约束,及默认值
本文来自博客园,作者:IT情深,转载请注明原文链接:https://www.cnblogs.com/wh445306/p/16751680.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性