当前位置:Gxlcms > 数据库问题 > SQLServer 表结构相关查询(快速了解数据库)

SQLServer 表结构相关查询(快速了解数据库)

时间:2021-07-01 10:21:17 帮助过:5人阅读

表结构查询 SELECT 表名 = case when a.colorder=1 then d.name else ‘‘ end, 表说明 = case when a.colorder=1 then isnull(f.value,‘‘) else ‘‘ end, 字段序号 = a.colorder, 字段名 = a.name, 标识 = case when COLUMNPROPERTY( a.id,a.name,IsIdentity)=1 then else ‘‘ end, 主键 = case when exists(SELECT 1 FROM sysobjects where xtype=PK and parent_obj=a.id and name in ( SELECT name FROM sysindexes WHERE indid in( SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid))) then else ‘‘ end, 类型 = b.name, 占用字节数 = a.length, 长度 = COLUMNPROPERTY(a.id,a.name,PRECISION), 小数位数 = isnull(COLUMNPROPERTY(a.id,a.name,Scale),0), 允许空 = case when a.isnullable=1 then else ‘‘ end, 默认值 = isnull(e.text,‘‘), 字段说明 = isnull(g.[value],‘‘) FROM syscolumns a left join systypes b on a.xusertype=b.xusertype inner join sysobjects d on a.id=d.id and d.xtype=U and d.name<>dtproperties left join syscomments e on a.cdefault=e.id left join sys.extended_properties g on a.id=g.major_id and a.colid=g.minor_id left join sys.extended_properties f on d.id=f.major_id and f.minor_id=0 where d.name=tableName --如果只查询指定表,加上此条件 order by a.id,a.colorder ------------------------------------------------------------------------------------------------- --查看数据库中所有外键 select oMain.name AS [主表名称] ,oSub.name AS [子表名称] ,fk.name AS [外键名称] ,MainCol.name AS [主表列名] ,SubCol.name AS [子表列名] from sys.foreign_keys fk JOIN sys.all_objects oSub ON (fk.parent_object_id = oSub.object_id) JOIN sys.all_objects oMain ON (fk.referenced_object_id = oMain.object_id) JOIN sys.foreign_key_columns fkCols ON (fk.object_id = fkCols.constraint_object_id) JOIN sys.columns SubCol ON (oSub.object_id = SubCol.object_id AND fkCols.parent_column_id = SubCol.column_id) JOIN sys.columns MainCol ON (oMain.object_id = MainCol.object_id AND fkCols.referenced_column_id = MainCol.column_id) ------------------------------------------------------------------------------------ --(导出扩展属性脚本) SELECT 表名 = d.name,字段名 = a.name, 字段说明 = isnull(g.[value],‘‘) ,EXEC sys.sp_addextendedproperty @name=N‘‘MS_Description‘‘, @value=N‘‘‘+CONVERT(VARCHAR(MAX),g.[value]) +‘‘‘,@level0type=N‘‘SCHEMA‘‘,@level0name=N‘‘dbo‘‘,@level1type=N‘‘TABLE‘‘,@level1name=N‘‘‘+CONVERT(VARCHAR(MAX),d.name) +‘‘‘,@level2type=N‘‘COLUMN‘‘,@level2name=N‘‘‘+CONVERT(VARCHAR(MAX),a.name)+‘‘‘‘ FROM syscolumns a left join systypes b on a.xusertype=b.xusertype inner join sysobjects d on a.id=d.id and d.xtype=U and d.name<>dtproperties left join syscomments e on a.cdefault=e.id left join sys.extended_properties g on a.id=g.major_id and a.colid=g.minor_id WHERE g.[value] IS NOT NULL ORDER BY d.name,a.name ---------------------------------------------------------------------- --当前数据库表大小及行数 SELECT SCHEMA_NAME(tbl.schema_id) [Schema],tbl.name AS [TableName], (CAST(ISNULL((select 8 * SUM(CASE WHEN a.type <> 1 THEN a.used_pages WHEN p.index_id < 2 THEN a.data_pages ELSE 0 END) FROM sys.indexes as i JOIN sys.partitions as p ON p.object_id = i.object_id and p.index_id = i.index_id JOIN sys.allocation_units as a ON a.container_id = p.partition_id where i.object_id = tbl.object_id),0.0)*1.0/1024 AS DECIMAL(18,3))) AS [DataSpaceUsed(MB)],SI.[rows] FROM sys.tables AS tbl LEFT JOIN sys.sysindexes si ON tbl.object_id=si.id AND si.indid IN(0,1) ORDER BY [Schema],[DataSpaceUsed(MB)] DESC ----------------------------------------------------------------------------------------- -- 查看表中的自增列是否为主键 SELECT 表名= D.NAME, 列名= A.NAME, 是否自增= CASE WHEN COLUMNPROPERTY( A.ID,A.NAME, ISIDENTITY )=1 THEN ELSE ‘‘ END, 主键= CASE WHEN EXISTS(SELECT 1 FROM SYSOBJECTS WHERE XTYPE= PK AND PARENT_OBJ=A.ID AND NAME IN ( SELECT NAME FROM SYSINDEXES WHERE INDID IN( SELECT INDID FROM SYSINDEXKEYS WHERE ID = A.ID AND COLID=A.COLID))) THEN ELSE ‘‘ END FROM SYSCOLUMNS A LEFT JOIN SYSTYPES B ON A.XUSERTYPE=B.XUSERTYPE INNER JOIN SYSOBJECTS D ON A.ID=D.ID AND D.XTYPE= U AND D.NAME <> DTPROPERTIES where COLUMNPROPERTY( A.ID,A.NAME, ISIDENTITY )=1 ------------------------------------------------------------------ --各表对象下的其他对象 select t1.[object_id],t1.[type],t1.name,t2.[object_id],t2.[type],t2.name from sys.objects t1 inner join sys.objects t2 on t1.[object_id]=t2.parent_object_id order by t1.[type],t1.name,t2.[type],t2.name select t1.id,t1.xtype,t1.name,t2.id,t2.xtype,t2.name from sys.sysobjects t1 inner join sys.sysobjects t2 on t1.id=t2.parent_obj order by t1.xtype,t1.name,t2.xtype,t2.name ----------------------------------------------------------------------------- --唯一键约束 SELECT tbl.name tab,i.name AS [Name] FROM sys.tables AS tbl INNER JOIN sys.indexes AS i ON (i.index_id > 0 and i.is_hypothetical = 0) AND (i.object_id=tbl.object_id) WHERE (i.is_primary_key + 2*i.is_unique_constraint=2) and SCHEMA_NAME(tbl.schema_id)=dbo ORDER BY [Name] ASC ------------------------------------------------------------------------------------ --查看数据库约束 SELECT OBJECT_NAME(parent_object_id) as TableName,name,definition FROM sys.default_constraints ORDER BY TableName,name --------------------------------------------------------------------------------------- --表各列约束 select OBJECT_NAME(t2.object_id) as TabName,t2.name as ColumnName,t1.name as [Constraint] from sys.default_constraints t1 inner join sys.columns t2 on t1.parent_object_id=t2.object_id and t1.parent_column_id=t2.column_id order by TabName,ColumnName,[Constraint] ---------------------------------------------------------------------------------- -- 当前数据库文件增长设置情况 SELECT Name, FileName , CAST((Size * 8 / 1024) AS varchar(10)) + MB AS FileSize , MaxSize = CASE MaxSize WHEN -1 THEN Unlimited ELSE CAST((Maxsize / 128) AS varchar(10)) + MB END FROM sys.sysfiles; -- 所有数据库文件增长设置情况 select DB_NAME(database_id) as dbName,file_id,(size*8/1024) as [size(mb)] ,case when is_percent_growth = 1 then 10% else CONVERT(varchar(10),growth*8/1024)+M end as growth ,type_desc,physical_name from sys.master_files where state = 0 --and database_id=DB_id() ----------------------------------------------------------------------------------------------------------------- --数据库的一些关键属性 SELECT db.[name] AS [Database Name], db.recovery_model_desc AS [Recovery Model], db.log_reuse_wait_desc AS [Log Reuse Wait Description], ls.cntr_value AS [Log Size (KB)], lu.cntr_value AS [Log Used (KB)], CAST(CAST(lu.cntr_value AS FLOAT) / CAST(ls.cntr_value AS FLOAT)AS DECIMAL(18,2)) * AS [Log Used %], db.[compatibility_level] AS [DB Compatibility Level], db.page_verify_option_desc AS [Page Verify Option], db.is_auto_create_stats_on, db.is_auto_update_stats_on, db.is_auto_update_stats_async_on, db.is_parameterization_forced, db.snapshot_isolation_state_desc, db.is_read_committed_snapshot_on, is_auto_shrink_on, is_auto_close_on FROM sys.databases AS db WITH (NOLOCK) INNER JOIN sys.dm_os_performance_counters AS lu WITH (NOLOCK) ON db.name = lu.instance_name INNER JOIN sys.dm_os_performance_counters AS ls WITH (NOLOCK) ON db.name = ls.instance_name WHERE lu.counter_name LIKE NLog File(s) Used Size (KB)% AND ls.counter_name LIKE NLog File(s) Size (KB)% AND ls.cntr_value > 0 OPTION (RECOMPILE); ---------------------------------------------------------------------------------------- --最近一周内数据库备份情况 SELECT user_name AS [User] ,server_name AS [Server] ,database_name AS [Database] ,recovery_model AS RecoveryModel ,case type when D then 数据库 when I then 差异数据库 when L then 日志 when F then 文件或文件组 when G then 差异文件 when P then 部分 when Q then 差异部分 else type end as [backupType] ,convert(numeric(10,2),backup_size/1024/1024) as [Size(M)] ,backup_start_date AS backupStartTime ,backup_finish_date as backupFinishTime ,name ,expiration_date from msdb.dbo.backupset where backup_start_date >= DATEADD(D,-7,GETDATE()) ----------------------------------------------------------------------- -- 作业启用情况和所有者 select a.job_id,a.name,a.enabled,b.name from msdb.dbo.sysjobs a inner join master.sys.syslogins b on a.owner_sid=b.sid and a.owner_sid<>0x01 order by a.name -- 更改作业所有者 EXEC msdb.dbo.sp_update_job @job_id=Njob_id, @owner_login_name=Nsa ---------------------------------------------------------------------------------------------- -- 索引 主键/类型/列 情况 ;with tb as( SELECT tbl.name AS TableName,i.name AS IndexName,clmns.name AS ColumName,i.is_primary_key AS isPrimaryKey,i.type_desc FROM sys.tables AS tbl INNER JOIN sys.indexes AS i ON (i.index_id > 0 and i.is_hypothetical = 0) AND (i.object_id=tbl.object_id) INNER JOIN sys.index_columns AS ic ON (ic.column_id > 0 AND (ic.key_ordinal > 0 or ic.partition_ordinal = 0 or ic.is_included_column != 0)) AND (ic.index_id=CAST(i.index_id AS int) AND ic.object_id=i.object_id) INNER JOIN sys.columns AS clmns ON clmns.object_id = ic.object_id and clmns.column_id = ic.column_id WHERE SCHEMA_NAME(tbl.schema_id) = Ndbo ) SELECT DISTINCT TableName,IndexName,isPrimaryKey,type_desc ,STUFF((SELECT ,+ColumName FROM tb B WHERE A.TableName=B.TableName AND A.IndexName=B.IndexName FOR XML PATH(‘‘)),1,1,‘‘) AS ColumName FROM tb A ORDER BY TableName,IndexName,isPrimaryKey,type_desc ---------------------------------------------------------------------------------------------------------------------------------------------------------- --表主键对应的列 SELECT OBJECT_NAME(C.id) AS TAB,B.name,A.name AS PrimaryKey ,E.type_desc,fill_factor FROM SYSCOLUMNS A,SYSOBJECTS B,SYSINDEXES C,SYSINDEXKEYS D , SYS.INDEXES E WHERE B.xtype = PK AND B.parent_obj = A.id AND C.id = A.id AND B.name = C.name AND D.id = A.id AND D.indid = C.indid AND A.colid = D.colid AND B.name=E.name ORDER BY TAB,B.name,PrimaryKey SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE OBJECTPROPERTY(OBJECT_ID(CONSTRAINT_NAME),ISPRIMARYKEY)=1 --AND TABLE_NAME=‘TABLE_NAME‘ ------------------------------------------------------------------------------------------------------- --所有表索引对应的键列和包含列 SELECT OBJECT_NAME(t1.id) as tab,t1.name ,STUFF((SELECT ,+t3.name FROM sys.sysindexkeys t2,sys.syscolumns t3 WHERE t1.indid=t2.indid and t1.id=t2.id and t2.id=t3.id and t2.colid=t3.colid and t2.keyno <> 0 FOR XML PATH(‘‘)),1,1,‘‘) AS IndexCols ,STUFF((SELECT ,+t3.name FROM sys.sysindexkeys t2,sys.syscolumns t3 WHERE t1.indid=t2.indid and t1.id=t2.id and t2.id=t3.id and t2.colid=t3.colid and t2.keyno = 0 FOR XML PATH(‘‘)),1,1,‘‘) AS IncludeCols FROM sys.sysindexes t1 WHERE t1.root is not null AND EXISTS(SELECT * FROM sys.tables t4 WHERE t1.id=t4.object_id) ORDER BY tab,IndexCols ------------------------------------------------------------------------------------------------------------ -- 查看表分区情况 select OBJECT_NAME(object_id) as tab,COUNT(partition_number) as part from sys.partitions where index_id in(0,1) and OBJECT_NAME(object_id) not like conflict% and OBJECT_NAME(object_id) not like sys% group by object_id order by tab ------------------------------------------------------------------------------------------- -- 查看表备注信息 select distinct 表名 = case when a.colorder=1 then d.name else ‘‘ end ,表说明 = case when a.colorder=1 then isnull(f.value,‘‘) else ‘‘ end from syscolumns a inner join sysobjects d on a.id=d.id and d.xtype=U and d.name<>dtproperties inner join sys.extended_properties f on d.id=f.major_id where f.minor_id=0 --and CHARINDEX(‘‘,convert(varchar(max),f.value))<>0 ------------------------------------------------------------------------------------------- -- 查看表中各列的属性及创建扩展属性脚本(默认架构dbo) select o.name,c.name,p.name,p.value ,NEXEC sys.sp_addextendedproperty @name=N‘‘‘+p.name+ N‘‘‘, @value=N‘‘‘+convert(nvarchar(4000),p.value) +N‘‘‘ , @level0type=N‘‘SCHEMA‘‘,@level0name=N‘‘dbo‘‘, @level1type=N‘‘TABLE‘‘,@level1name=N‘‘‘ +o.name+ N‘‘‘, @level2type=N‘‘COLUMN‘‘,@level2name=N‘‘‘+c.name+ N‘‘‘‘ as script_addextendedproperty from sys.sysobjects o inner join sys.syscolumns c on o.id = c.id inner join sys.extended_properties p on c.id=p.major_id and c.colid=p.minor_id where o.xtype = NU --and o.name = ‘tableName‘ ------------------------------------------------------------------------------------------- -- 查看对象定义脚本 --exec sp_helptext ‘object_name‘ SELECT * from INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = FUNCTION AND ROUTINE_NAME=‘‘ SELECT *

人气教程排行