--使用类似下面的代码就可以了exec sp_MSForEachTable 
@precommand=N'
create table ##(
id int identity,
表名 sysname,
字段数 int,
记录数 int,
保留空间 Nvarchar(10),
使用空间 varchar(10),
索引使用空间 varchar(10),
未用空间 varchar(10))',
@command1=N'insert ##(表名,记录数,保留空间,使用空间,索引使用空间,未用空间) exec sp_spaceused ''?''
update ## set 字段数=(select count(*) from syscolumns where id=object_id(''?'')) where id=scope_identity()',
@postcommand=N'select * from ## order by id drop table ##',
@whereand=N' and exists(select * from 表A where name=o.name)'
 --这里的表A是保存表名的表,name是指表的列,其他不用调整。

解决方案 »

  1.   

    --下面的示例使用上述方法显示pubs库中,各表的记录use pubs
    go--用于确定那些表需要获取记录
    create table tb(name sysname)
    insert tb select 'jobs'
    union all select 'pub_info'
    go--得到数据库中所有表的空间/记录情况
    exec sp_MSForEachTable 
    @precommand=N'
    create table ##(
    id int identity,
    表名 sysname,
    字段数 int,
    记录数 int,
    保留空间 Nvarchar(10),
    使用空间 varchar(10),
    索引使用空间 varchar(10),
    未用空间 varchar(10))',
    @command1=N'insert ##(表名,记录数,保留空间,使用空间,索引使用空间,未用空间) exec sp_spaceused ''?''
    update ## set 字段数=(select count(*) from syscolumns where id=object_id(''?'')) where id=scope_identity()',
    @postcommand=N'select * from ## order by id drop table ##',
    @whereand=N' and exists(select * from tb where name=o.name)'
      

  2.   

    --或者可以这样处理--记录结果的临时表
    create table #(tbname sysname,records int)--获取记录数
    declare tb cursor local
    for
    select N'insert # select '
    +quotename(表名,N'''')
    +N',count(*) from '
    +quotename(表名)
    from 表A
    declare @s nvarchar(4000)
    open tb
    fetch tb into @s
    while @@fetch_status=0
    begin
    exec(@s)
    fetch tb into @s
    end
    close tb
    deallocate tb
    select * from #