当前位置:首页 > 数据库 > Sqlserver

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

                --
                    表结构查询
                SELECT
                   
    表名       
                =
                case
                when a.colorder=1then d.name else‘‘end,  
    表说明     =casewhen a.colorder=1thenisnull(f.value,‘‘) else‘‘end,  
    字段序号   = a.colorder,  
    字段名     = a.name,  
    标识       =casewhenCOLUMNPROPERTY( a.id,a.name,IsIdentity)=1thenelse‘‘end,  
    主键       =casewhenexists(SELECT1FROM sysobjects where xtype=PKand 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))) thenelse‘‘end,  
    类型       = b.name,  
    占用字节数 = a.length,  
    长度       =COLUMNPROPERTY(a.id,a.name,PRECISION),  
    小数位数   =isnull(COLUMNPROPERTY(a.id,a.name,Scale),0),  
    允许空     =casewhen a.isnullable=1thenelse‘‘end,  
    默认值     =isnull(e.text,‘‘),  
    字段说明   =isnull(g.[value],‘‘)  
FROM syscolumns a leftjoin systypes b   
on a.xusertype=b.xusertype  
innerjoin sysobjects d   
on a.id=d.id  and d.xtype=Uand  d.name<>dtpropertiesleftjoin syscomments e   
on a.cdefault=e.id  
leftjoin sys.extended_properties   g   
on a.id=g.major_id and a.colid=g.minor_id    
leftjoin sys.extended_properties f  
on d.id=f.major_id and f.minor_id=0where d.name=tableName--如果只查询指定表,加上此条件  orderby 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_idAND fkCols.parent_column_id = SubCol.column_id)
JOIN sys.columns MainCol ON (oMain.object_id= MainCol.object_idAND 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 leftjoin systypes b on a.xusertype=b.xusertype    
innerjoin sysobjects d on a.id=d.id  and d.xtype=Uand  d.name<>dtpropertiesleftjoin syscomments e on a.cdefault=e.id    
leftjoin sys.extended_properties g on a.id=g.major_id and a.colid=g.minor_id 
WHERE g.[value]ISNOTNULLORDERBY d.name,a.name



------------------------------------------------------------------------当前数据库表大小及行数SELECT SCHEMA_NAME(tbl.schema_id) [Schema],tbl.name AS[TableName],
(CAST(ISNULL((select8*SUM(CASEWHEN a.type <>1THEN a.used_pages WHEN p.index_id <2THEN a.data_pages ELSE0END) 
FROM sys.indexes as i
JOIN sys.partitions as p ON p.object_id= i.object_idand 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/1024ASDECIMAL(18,3))) AS[DataSpaceUsed(MB)],SI.[rows]FROM sys.tables AS tbl LEFTJOIN sys.sysindexes si ON tbl.object_id=si.id AND si.indid IN(0,1)
ORDERBY[Schema],[DataSpaceUsed(MB)]DESC-------------------------------------------------------------------------------------------  查看表中的自增列是否为主键SELECT
表名= D.NAME, 
列名= A.NAME,
是否自增=CASEWHENCOLUMNPROPERTY( A.ID,A.NAME, ISIDENTITY )=1THENELSE‘‘END,
主键=CASEWHENEXISTS(SELECT1FROM 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))) THENELSE‘‘ENDFROM SYSCOLUMNS A
LEFTJOIN SYSTYPES B ON A.XUSERTYPE=B.XUSERTYPE
INNERJOIN SYSOBJECTS D ON A.ID=D.ID AND D.XTYPE=UAND D.NAME <>DTPROPERTIES whereCOLUMNPROPERTY( 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
innerjoin sys.objects t2 on t1.[object_id]=t2.parent_object_id
orderby 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
innerjoin sys.sysobjects t2 on t1.id=t2.parent_obj
orderby t1.xtype,t1.name,t2.xtype,t2.name


-----------------------------------------------------------------------------
--唯一键约束SELECT tbl.name tab,i.name AS[Name]FROM sys.tables AS tbl
INNERJOIN sys.indexes AS i ON (i.index_id >0and 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)=dboORDERBY[Name]ASC------------------------------------------------------------------------------------
--查看数据库约束SELECTOBJECT_NAME(parent_object_id) as TableName,name,definition
FROM sys.default_constraints ORDERBY TableName,name

-----------------------------------------------------------------------------------------表各列约束selectOBJECT_NAME(t2.object_id) as TabName,t2.name as ColumnName,t1.name as[Constraint]from sys.default_constraints t1
innerjoin sys.columns t2 
on t1.parent_object_id=t2.object_idand t1.parent_column_id=t2.column_id
orderby TabName,ColumnName,[Constraint]------------------------------------------------------------------------------------    当前数据库文件增长设置情况SELECT Name, FileName
, CAST((Size *8/1024) ASvarchar(10)) +MBAS FileSize
, MaxSize =CASE MaxSize WHEN-1THENUnlimitedELSECAST((Maxsize /128) ASvarchar(10)) +MBENDFROM sys.sysfiles;

--    所有数据库文件增长设置情况selectDB_NAME(database_id) as dbName,file_id,(size*8/1024)  as[size(mb)]
,casewhen is_percent_growth =1then10%elseCONVERT(varchar(10),growth*8/1024)+Mendas 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 ASFLOAT) /CAST(ls.cntr_value ASFLOAT)ASDECIMAL(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)  
INNERJOIN sys.dm_os_performance_counters AS lu WITH (NOLOCK)  
ON db.name = lu.instance_name  
INNERJOIN 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 >0OPTION (RECOMPILE);  


------------------------------------------------------------------------------------------最近一周内数据库备份情况SELECTuser_nameAS[User]
,server_name AS[Server]
,database_name AS[Database]
,recovery_model AS RecoveryModel 
,case type whenDthen数据库whenIthen差异数据库whenLthen日志whenFthen文件或文件组whenGthen差异文件whenPthen部分whenQthen差异部分else type endas[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
innerjoin master.sys.syslogins b on a.owner_sid=b.sid and a.owner_sid<>0x01orderby 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  
INNERJOIN sys.indexes AS i ON (i.index_id >0and i.is_hypothetical =0) AND (i.object_id=tbl.object_id)  
INNERJOIN sys.index_columns AS ic ON (ic.column_id >0AND (ic.key_ordinal >0or ic.partition_ordinal =0or ic.is_included_column !=0))   
    AND (ic.index_id=CAST(i.index_id ASint) AND ic.object_id=i.object_id)  
INNERJOIN sys.columns AS clmns ON clmns.object_id= ic.object_idand clmns.column_id = ic.column_id  
WHERE SCHEMA_NAME(tbl.schema_id) = Ndbo
)
SELECTDISTINCT 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 ORDERBY TableName,IndexName,isPrimaryKey,type_desc

------------------------------------------------------------------------------------------------------------------------------------------------------------表主键对应的列 SELECTOBJECT_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 =PKAND 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  
ORDERBY TAB,B.name,PrimaryKey 


SELECT*FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
WHEREOBJECTPROPERTY(OBJECT_ID(CONSTRAINT_NAME),ISPRIMARYKEY)=1--AND TABLE_NAME=‘TABLE_NAME‘  ---------------------------------------------------------------------------------------------------------所有表索引对应的键列和包含列SELECTOBJECT_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 <>0FOR 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 =0FOR XML PATH(‘‘)),1,1,‘‘) AS IncludeCols
FROM sys.sysindexes t1 
WHERE t1.root isnotnullANDEXISTS(SELECT*FROM sys.tables t4 WHERE t1.id=t4.object_id)
ORDERBY tab,IndexCols

------------------------------------------------------------------------------------------------------------
--    查看表分区情况selectOBJECT_NAME(object_id) as tab,COUNT(partition_number) as part 
from sys.partitions 
where index_id in(0,1)
andOBJECT_NAME(object_id) notlikeconflict%andOBJECT_NAME(object_id) notlikesys%groupbyobject_idorderby tab

-------------------------------------------------------------------------------------------
--    查看表备注信息selectdistinct 
 表名 =casewhen a.colorder=1then d.name else‘‘end
,表说明 =casewhen a.colorder=1thenisnull(f.value,‘‘) else‘‘endfrom syscolumns a 
innerjoin sysobjects d on a.id=d.id  and d.xtype=Uand  d.name<>dtpropertiesinnerjoin 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 
innerjoin sys.syscolumns c on o.id = c.id
innerjoin 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 =FUNCTIONAND ROUTINE_NAME=‘‘SELECT*from INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE =PROCEDUREAND ROUTINE_NAME=‘‘SELECT*from sys.sql_modules M WHEREEXISTS(SELECT*from sys.triggers T WHERE M.object_id=T.object_id)

SELECT o.name,o.type,o.create_date,o.modify_date,sm.definition  
FROM sys.sql_modules sm innerjoin sys.objects o on sm.object_id=o.object_idORDERBY o.type,o.name  
  
SELECT*from sys.sql_modules   
SELECT*from sys.all_sql_modules   
SELECT*from sys.system_sql_modules   


--------------------------------------------------------------------------------------------------------------------

 

原文:https://www.cnblogs.com/zhangwei99com/p/8482842.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!