求SQL语句或存储过程 实现:
我的是ms sql2005数据库,
我想每天统计某个库下所有表的记录总和,并将结果记录到Result表中。假设有这个库有 a b c 表以及一个名为Record表,
这个Record表里面记录就是本库所有表的名称(a b c )现在想 a b c各表的记录数 将总和写入Result表。因为abc。。表可以今后不断的创建新表,
如果采用select count(*) from a ...这样写死方式 不方便以后维护 所以看看能否实现自动读取Record表里面的所有表名
并进行统计
谢谢你的帮忙

解决方案 »

  1.   


    --楼主是否要索引?
    select   o.name   as   表名,i.rows   as   记录数   
      from   sysobjects  o,sysindexes   i   
      where   o.id=i.id   
      and   o.type='u'   
      and   i.indid=0 indid=0(没有聚集索引的表)   或者   indid=1(有聚集索引的表)  
    看结果是否正确?
      

  2.   


    --或者
    insert into Record exec sp_msforeachtable   'select   ''?'',count(*)   from   ?'   
      

  3.   

    declare @a varchar(max),@b varchar(max)
    select @a='insert record(',@b='select '
    select @a=@a+name+',',@b=@b+'(select count(*) from '+name+'),' from sysobjects where type='u'
    select @a=left(@a,len(@a)-1)+')',@b=left(@b,len(@b)-1)exec(@a+@b)
      

  4.   

    --查询当前表的数据量计数
    select max(a.rowcnt)  计数
    from sysindexes a
    join sys.objects b on b.object_id=a.id
    where b.[name]='kucun'--查询当前数据库的数据量计数,按表分组
    use --数据库
    select max(a.rowcnt) 计数,b.[name] 表名 
    from sysindexes a
    join sys.objects b on b.object_id=a.id
    where b.type='U'
    group by b.[name]
    having max(a.rowcnt) >0
    order by 1 desc
      

  5.   

    CREATE TABLE #temp (TableName VARCHAR (255), RowCnt INT)
    EXEC sp_MSforeachtable 'INSERT INTO #temp SELECT ''?'', COUNT(*) FROM ?'
    SELECT TableName, RowCnt FROM #temp ORDER BY TableName
    DROP TABLE #temp