zoukankan      html  css  js  c++  java
  • sql server系统表和视图相关的语句

    一、系统表

    数据字典的详细信息请查SQL SERVER BOL,这里仅列出一部分。

    1.1sysservers

    1、查看所有本地服务器及链接服务器

    select * from master..sysservers

    1.2sysdatabases

    1:查询sa创建的所有数据库

    select * from master..sysdatabases

    where sid not in(select sid from master..syslogins where name='sa')

    --或者

    select dbid, name AS DB_NAME from master..sysdatabases

    where sid <> 0x01

    1.3sysobjects

    1:获取当前数据库中的所有用户表

    select name from sysobjects where xtype='U' and status>0

    为什么要加status>0,因为表dtproperties,虽然该表的xtypeU,实质上它是系统表。

    dtproperties这个表里保存的是关系图如果没建关系图就是空的。

    注意:这个表只是数据库对象的属性,如果想要看表、索引详细的属性,查看sysindexes

    2:查看当前数据库中所有存储过程

    select name as 存储过程名称 from sysobjects where xtype='P' and status>0

    为什么要加status>0,是为了去掉当前数据库中的系统存储过程。

    注:该系统表中typextype的区别是什么?

    Type是在SQL SERVER 6.0就有的,xTypeSQL SERVER 7.0才出现,Type的保留只是为了向后兼容。每种数据库对象的类型详见SQL SERVER BOL

    1.4syscolumns

    1:获取表或视图的所有字段,存储过程或函数的所有参数

    select name from syscolumns where id=object_id('表名')

    1.5sysproperties

    1怎么把SQL SERVER中表设计和表注释读出来

    --表的注释全在sysproperties

    select b.name,value from sysproperties as a,sysobjects as b

    where a.id=b.id and b.name='表名'

    1.6sysindexes

    1:根据聚集索引,快速查询表的行数

    SELECT rowcnt,indid FROM sysindexes WHERE id=OBJECT_ID('tableName')and indid < 2

    注意:使用这种方法可能不精确,因为系统的统计信息在某些时候不一定是准确的。关于统计的维护(dbcc updateusage()),详见《SQL SERVER 性能优化——查询优化》series

    2:查看索引表信息

    select

    table_Name=sysobjects.Name,

        index_Name=sysindexes.Name,

        Type=sysobjects.type,

        分配索引页=sysindexes.reserved,

        使用索引页=sysindexes.used,

        叶子层页=sysindexes.Dpages,

        非叶子层页=sysindexes.used-sysindexes.Dpages,

        rows=sysindexes.rowcnt

    from sysindexes left outer join sysobjects on sysindexes.id=sysobjects.id

    where sysindexes.indid>0 and sysindexes.indid<255 and sysindexes.status & 64=0

    注意:若发现非叶子层的页数为负数,最好是运行DBCC UPDATEUSAGE ('dbname','tbname','ixname')来更新一下sysindexes的信息

    1.7syslogins

    SQL SERVER 服务器的登录信息,比如:sa,有关登录、用户、角色的信息详见《SQL SERVER 2000 管理——安全——用户权限》。

    select * from syslogins

    select * from sysxlogins

    sysxloginssyslogins的精简版,BOL中没有说明,不推荐使用。

     

    1.8sysprocesses

    1:查看用户进程信息

    select spid,uid,syslogins.name,login_time,net_address from sysprocesses,syslogins where sysprocesses.sid=syslogins.sid

    2:查看数据库启动时间

    select convert(varchar(30),login_time,120) from master..sysprocesses where spid=1

    1.9sysdepends

    1:查看与某一个表相关的视图、存储过程、函数

    select * from sysdepends where depid=object_id('表名')

    --或者

    select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'

    注意:这种查法,只适用在没有with Encryption选项,即没有加密该对象时。

    --或者

    sp_depends

    注意:这个表的统计信息并不准确,没有什么好的办法,查询结果只可用于参考。

    1.10sysmessages

    SQL SERVER返回的内部错误都有在这里,可自行定义进行错误的添加,但一般我习惯于新建一个错误的表来定义自己程序中的错误。

    select * From master..sysmessages where error=5037

    1.11sysfilessysfilegroups

    1、查询当前数据库的文件使用情况

    select name,filename,size/128 as 'used(M)',case maxsize/128 when 0 then 'no limit' else cast(maxsize/128 as varchar(10)) end as 'total(M)' from sysfiles

    2、查询当前数据库的表所在文件组

    select distinct a.id,a.name,b.groupid,c.groupname from sysobjects a inner join sysindexes b on a.id=b.id

    inner join sysfilegroups c on b.groupid=c.groupid

    where a.xType='U' and a.status>0 order by a.name

    sysfiles1sysfiles的精简版,BOL中没有说明,不推荐使用。

    二、系统视图

    master数据库中有INFORMATION_SCHEMAsystem_function_schema两个用户,它们的登录是<>,这是系统内置的两个用户。

    INFORMATION_SCHEMA拥有自已的视图,在SQL Server 2000中没有被广泛使用,因为很多时候都可以从系统表中得到我们想要的结果,同样到了SQL Server 2005中,被广泛使用的仍然是sys所拥有的视图,SQL Server 2005的相关内容详见后续《SQL Server 2005series文章。举例如下:

    1、查询某个表的哪些字段不允许为空

    select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS

    where IS_NULLABLE='NO' and TABLE_NAME='stb_User'

    2、查询某个表的键约束

    select * from INFORMATION_SCHEMA.KEY_COLUMN_USAGE

    where TABLE_NAME='stb_User'

    注:键约束,是指除了CHECKNOT NULL外的约束,即PKFKUNIQUEDEFAULT不是约束。

  • 相关阅读:
    DDOS攻击与防御
    .NET Core 二维码生成Demo
    腾讯云服务器远程登录卡顿严重导致无法登录解决办法
    signalR【一、官方案例】
    Python题目:生成100个随机不重复的字符串【杭州多测师】【杭州多测师_王sir】
    把字符串当中重复的字符打印出来【杭州多测师】【杭州多测师_王sir】
    PC#1 ping PC#2,请描述PC1和PC2之间的通信过程【杭州多测师】【杭州多测师_王sir】
    逻辑题【杭州多测师】【杭州多测师_王sir】
    编程题:给一个网址获取分配网址的协议,域名,路径,端口,参数1的值,参数2的值,并以字典的形式打印出结果【杭州多测师】【杭州多测师_王sir】
    经典的Python题目之找到a开头的元素、组成新的列表【多测师王sir】【杭州多测师_王sir】
  • 原文地址:https://www.cnblogs.com/armanda/p/4255715.html
Copyright © 2011-2022 走看看