如何获取⼀个数据库的所有建表语句与创建索引的语句?如何获取⼀个数据库的所有建表语句与创建索引的语句?⽣成建表语句操作 SSMS中右击数据库-》⽣成脚本-》选择仅限架构利⽤T-SQL⽣成建表语句--⽣成当前数据库下所有表的创建脚本select'create table ['+ +'] ('+ o.list +')'+CASE WHEN tc.Constraint_Name IS NULL THEN''ELSE'ALTER TABLE '+ +' ADD CONSTRAINT '+ tc.Constraint_Name +' PRIMARY KEY '+' ('+LEFT(j.List, Len from sysobjects socross apply(SELECT' ['+column_name+'] '+data_type +case data_typewhen'sql_variant'then''when'text'then''when'decimal'then'('+cast(numeric_precision_radix as varchar) +', '+cast(numeric_scale as varchar) +')'else coalesce('('+case when character_maximum_length =-1then'MAX'else cast(character_maximum_length as varchar) end+')','') end+''+case when exists (select id from syscolumnswhere object_name(id)=and name=column_nameand columnproperty(id,name,'IsIdentity') =1) then'IDENTITY('+cast(ident_seed() as varchar) +','+cast(ident_incr() 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 = order by ordinal_positionFOR XML PATH('')) o (list)left joininformation_schema.table_constraints tcon tc.Table_name = AND 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 NOT IN ('dtproperties')View Code⽣成表索引创建、删除语句--⽣成表索引的创建删除语句;WITH TBAS ( SELECT TB.object_id ,Schema_name = ,table_name = FROM sys.tables TBINNER JOIN sys.schemas Sch ON TB.schema_id = Sch.schema_idWHERE TB.is_ms_shipped =0),IXCAS ( SELECT IXC.object_id ,IXC.index_id ,IXC.index_column_id ,IXC.is_descending_key ,IXC.is_included_column ,column_name = FROM SYS.index_columns IXCINNER JOIN SYS.columns C ON IXC.object_id= C.object_idAND IXC.column_id = C.column_id),IXAS ( SELECT IX.object_id ,index_name = ,index_type_desc = IX.type_desc ,IX.is_unique ,IX.is_primary_key ,IX.is_unique_constraint ,IX.is_disabled ,index_columns_TEMP =STUFF(IXC_COL.index_columns, 1, 1,N'') ,index_columns =CASE WHEN IXC_COL_INCLUDE.index_columns_includes IS NOT NULLTHEN STUFF(LEFT(IXC_COL.index_columns,DATALENGTH(IXC_COL.index_columns)-DATALENGTH(IXC_COL_INCLUDE.index_columns_includes)),1, 1, N'')ELSE STUFF(IXC_COL.index_columns,1, 1, N'')END ,index_columns_includes =STUFF(IXC_COL_INCLUDE.index_columns_includes,1, 1, N'')FROM sys.indexes IXCROSS APPLY ( SELECT index_columns = ( SELECTN','+QUOTENAME(column_name)FROMIXCWHEREobject_id= IX.object_idAND index_id = IX.index_idORDER BY index_column_idFOR XML PATH('') ,ROOT('r') ,TYPE).value('/r[1]', 'nvarchar(max)')) IXC_COLOUTER APPLY ( SELECT index_columns_includes = ( SELECTN','+QUOTENAME(column_name)FROMIXCWHEREobject_id= IX.object_idAND index_id = IX.index_idAND is_included_column =1ORDER BY index_column_idFOR XML PATH('') ,ROOT('r') ,TYPE).value('/r[1]', 'nvarchar(max)')) IXC_COL_INCLUDEWHERE index_id >0)SELECT DB_NAME() AS N'数据库名' ,TB.Schema_name AS N'架构' ,TB.table_name AS N'表名' ,IX.index_name AS N'索引名' ,IX.index_type_desc AS N'索引类型' ,IX.is_unique AS N'是否唯⼀索引' ,IX.is_primary_key AS N'是否主键' ,IX.is_unique_constraint AS N'是否唯⼀约束' ,IX.is_disabled AS N'是否禁⽤索引' ,IX.index_columns AS N'索引列' ,IX.index_columns_includes AS N'索引包含列' ,N'CREATE INDEX '+ N'['+ IX.index_name + N']'+ N' ON '+ N'['+QUOTENAME(DB_NAME()) + N'.'+QUOTENAME(TB.SCHEMA_NAME) + N'.'+QUOTENAME(TB.table_name) + N'('+ IX.index_columns + N')'+CASE WHEN IX.index_columns_includes IS NOT NULLTHEN CHAR(13) + N'INCLUDE ('+ IX.index_columns_includes+ N')'ELSE N''END AS N'创建索引' ,N'DROP INDEX '+QUOTENAME(IX.index_name) + N' ON '+QUOTENAME(DB_NAME()) + N'.'+QUOTENAME(TB.SCHEMA_NAME) + N'.'+QUOTENAME(TB.table_name) AS N'删除索引'FROM TBINNER JOIN IX ON TB.object_id= IX.object_idORDER BY Schema_name ,table_name ,IX.index_nameView Code查看表详情、数据字典--查看表的详细信息SELECT表名=CASE WHEN C.column_id =1THEN ELSE N''END ,表说明=ISNULL(CASE WHEN C.column_id =1THEN PTB.[value]END, N'') ,字段序号= C.column_id ,字段名= ,主键=ISNULL(IDX.PrimaryKey, N'') ,标识=CASE WHEN C.is_identity =1THEN N'√'ELSE N''END ,计算列=CASE WHEN C.is_computed =1THEN N'√'ELSE N''END ,类型= ,长度= C.max_length ,精度= C.precision ,⼩数位数= C.scale ,允许空=CASE WHEN C.is_nullable =1THEN N'√'ELSE N''END ,默认值=ISNULL(D.definition, N'') ,字段说明=ISNULL(PFD.[value], N'') ,索引名=ISNULL(IDX.IndexName, N'') ,索引排序=ISNULL(IDX.Sort, N'') ,创建时间= O.Create_Date ,修改时间= O.Modify_dateFROM sys.columns CINNER JOIN sys.objects O ON C.[object_id]= O.[object_id]AND O.type ='U'AND O.is_ms_shipped =0INNER JOIN sys.types T ON er_type_id = er_type_idLEFT JOIN sys.default_constraints D ON C.[object_id]= D.parent_object_idAND C.column_id = D.parent_column_idAND C.default_object_id = D.[object_id]LEFT JOIN sys.extended_properties PFD ON PFD.class =1AND C.[object_id]= PFD.major_idAND C.column_id = PFD.minor_id-- AND ='Caption' -- 字段说明对应的描述名称(⼀个字段可以添加多个不同name的描述) LEFT JOIN sys.extended_properties PTB ON PTB.class =1AND PTB.minor_id =0AND C.[object_id]= PTB.major_id-- AND ='Caption' -- 表说明对应的描述名称(⼀个表可以添加多个不同name的描述) LEFT JOIN-- 索引及主键信息( SELECT IDXC.[object_id] ,IDXC.column_id ,Sort =CASE INDEXKEY_PROPERTY(IDXC.[object_id],IDXC.index_id,IDXC.index_column_id,'IsDescending')WHEN1THEN'DESC'WHEN0THEN'ASC'ELSE''END ,PrimaryKey =CASE WHEN IDX.is_primary_key =1THEN N'√'ELSE N''END ,IndexName = FROM sys.indexes IDXINNER JOIN sys.index_columns IDXC ON IDX.[object_id]= IDXC.[object_id]AND IDX.index_id = IDXC.index_idLEFT JOIN sys.key_constraints KC ON IDX.[object_id]= KC.[parent_object_id]AND IDX.index_id = KC.unique_index_idINNER JOIN-- 对于⼀个列包含多个索引的情况,只显⽰第1个索引信息( SELECT[object_id] ,Column_id ,index_id =MIN(index_id)FROM sys.index_columnsGROUP BY[object_id] ,Column_id) IDXCUQ ON IDXC.[object_id]= IDXCUQ.[object_id]AND IDXC.Column_id = IDXCUQ.Column_idAND IDXC.index_id = IDXCUQ.index_id) IDX ON C.[object_id]= IDX.[object_id]AND C.column_id = IDX.column_id-- WHERE like '%name%'-- 如果只查询指定表,加上此条件ORDER BY ,C.column_idView Code。