• sqlserver 数据库 的数据库个数统计 表个数统计 表的数据量统计(转载)


    http://www.cnblogs.com/qinche/archive/2012/08/09/app.html

    由于今天要监控数据,急需统计实例中1有多少库2库里有多少表3每个表有多少数据

    --将写好的代码贴出来,用到如下的:

    --sysobjects:在数据库每个对象(约束、默认值、日志、规则、存储过程)占一行。 

    --sysindexes:数据库中的每个索引和表在表中各占一行。 

    --syscolumns:每个表和视图中的每列在表中占一行,存储过程中每个参数在表中占一行。 

    select * from sysobjects 

    select * from sysindexes 

    select * from syscolumns 

    --1-----------统计有多少数据库,查出库里面多少表---------------

    declare @str varchar(8000)

    set @str=''

    select @str=@str+

    'union all select '+quotename(name,'''')+' ,COUNT(*)

    from '+name+'.dbo.sysobjects where xtype=''U'''

    from (select  name from master.dbo.sysdatabases) a

    set @str =' select ''0数据库总数'' as 库名,(select  count(*) from master.dbo.sysdatabases)

     as 表的个数 '+ @str+' order by 库名 '

    print @str

    exec(@str)

    ---2----------统计当前数据库的表的个数和表的数据记录数---------- 

    set nocount on --不记录放回多少行受影响,这样速度快很多,是一种优化

    if object_id(N'tempdb.db.#temp') is not null 

      drop table #temp 

    create table #temp (name sysname,count numeric(18))

    insert into #temp 

    select o.name,i.rows 

    from sysobjects o,sysindexes i 

    where o.id=i.id and o.Xtype='U' and i.indid<2

    select count(count) 当前库总表数,sum(count) 总记录数 from #temp 

    select * from #temp 

    set nocount off --打开返回计数

    ----3--------------比较两个数据库的表个数和数据量,两个库的数据结构相同------- 

    set nocount on 

    if object_id(N'tempdb.db.#temp1') is not null 

      drop table #temp1 

    create table #temp1 (name sysname,count numeric(18))

    insert into #temp1 

    select o.name,i.rows 

    from Ljfcdata30.dbo.sysobjects o,Ljfcdata30.dbo.sysindexes i 

    where o.id=i.id and o.Xtype='U' and i.indid<2

    --查询2

    if object_id(N'tempdb.db.#temp2') is not null 

    drop table #temp2

    create table #temp2 (name sysname,count numeric(18))

    insert into #temp2 

    select o.name,i.rows 

    from Ljfcdata31.dbo.sysobjects o,Ljfcdata31.dbo.sysindexes i 

    where o.id=i.id and o.Xtype='U' and i.indid<2

    select '30号' as 日期 ,count(count) 总表数,sum(count) 总记录数 from #temp1 

    union all select '31号' ,count(count) 总表数,sum(count) 总记录数 from #temp2 

    select i.name as 表名, i.count as '30号',j.count as '31号'

    from #temp1 i Left join #temp2 j on i.name = j.name

      order by i.name

    set nocount off

    go

    ---3 查询数据库的所有表的所有列------------------------------------------------------------------

    ---3 查询数据库的所有表的所有列------------------------------------------------------------------
    declare @s varchar(8000)
    set @s=''
    select @s=@s+
    ( select 'select '''+name+''' as dbname,
    a.name collate Chinese_PRC_CI_AS as tablename,
    b.name collate Chinese_PRC_CI_AS as colname,
    c.name collate Chinese_PRC_CI_AS as coltype,
    c.length as coltype from ['+
    name+']..sysobjects a 
    inner join ['+
    name+']..syscolumns b on a.id=b.id 
    inner join ['+
    name+']..systypes c on c.xtype=b.xtype where a.type=''U'''
    as sql from master..sysdatabases as s where s.name=d.name)+' union '
    from master..sysdatabases as d 
    set @s=left(@s,len(@s)-7) + ' order by dbname'
    print @s
    execute(@s)

    --以上的脚本在sql2008R2中通过

  • 相关阅读:
    C语言-结构体内存对齐
    Wireshark-配合tcpdump对Android(安卓)手机抓包
    Python-技巧
    矩阵白化
    非负矩阵分解(3):拉格朗日乘子法求解
    非负矩阵分解(2):算法推导与实现
    非负矩阵分解(1):准则函数及KL散度
    自适应滤波:递归最小二乘
    自适应滤波:最小二乘法
    自适应滤波:奇异值分解SVD
  • 原文地址:https://www.cnblogs.com/qiulang/p/3435650.html
Copyright © 2020-2023  润新知