如何用语句查出一个数据库所有表名及表中含有数据条数?

解决方案 »

  1.   

    select name from sysobjects where type='U'
      

  2.   

    select name from sys.objects where type='u'数据条数一条语句貌似无法实现
      

  3.   


    EXEC sp_MSforeachtable @command1="print '?'",
                 @command2= "SELECT count(*) FROM ? "
      

  4.   

    declare @sql varchar(8000)
    set @sql='select * from ('
    select @sql=@sql+' select name = ''' + name + ''' , count(*) as num from '+name+' union all ' from sysobjects where xtype='u'
    set @sql = left(@sql,len(@sql) - 10) + ')a'
    exec(@sql)/*
    --sql server 2000的自带库pubs
    name        num         
    ----------- ----------- 
    titleauthor 25
    stores      6
    sales       21
    roysched    86
    discounts   3
    jobs        14
    pub_info    8
    employee    43
    authors     23
    publishers  8
    titles      18
    */
      

  5.   

    use northwind
    declare @tb varchar(100), @count int, @sql varchar(500)
    declare @tblist table (name varchar(100), count int)
    declare cur_tb cursor for
    select name from sysobjects where type='U'
    open cur_tb 
    fetch next from cur_tb into @tb
    while @@fetch_status!=-1 begin
    set @sql = 'select ['+@tb+'''s row count:]=count(1) from ['+@tb+']'
    exec (@sql)
    fetch next from cur_tb into @tb
    end
    close cur_tb 
    deallocate cur_tb 
    -- 
    -- Orders's row count:
    -- 830
    -- 
    -- Products's row count:
    -- 77
    -- 
    -- Order Details's row count:
    -- 2155
    -- 
    -- CustomerCustomerDemo's row count:
    -- 0
    -- 
    -- CustomerDemographics's row count:
    -- 0
    -- 
    -- Region's row count:
    -- 4
    -- 
    -- Territories's row count:
    -- 53
    -- 
    -- EmployeeTerritories's row count:
    -- 49
    -- 
    -- Employees's row count:
    -- 9
    -- 
    -- Categories's row count:
    -- 8
    -- 
    -- Customers's row count:
    -- 91
    -- 
    -- Shippers's row count:
    -- 3
    -- 
    -- Suppliers's row count:
    -- 29
    -- 
      

  6.   

    --查看SQLServer数据表的详细信息(SQL2000版)
    Select 
     表名=case when a.colorder=1 then d.name else '' end,
     表说明=case when a.colorder=1 then isnull(f.value,'') else '' end,
     字段序号=a.colorder,
     字段名=a.name,
     标识=case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end,
     主键=case when exists(Select 1 FROM sysobjects where xtype='PK' and name in (
      Select name FROM sysindexes Where indid in(
       Select indid FROM sysindexkeys Where id = a.id AND colid=a.colid
      ))) then '√' else '' end,
     类型=b.name,
     占用字节数=a.length,
     长度=COLUMNPROPERTY(a.id,a.name,'PRECISION'),
     小数位数=isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),
     允许空=case when a.isnullable=1 then '√'else '' end,
     默认值=isnull(e.text,''),
     字段说明=isnull(g.[value],'')
    FROM syscolumns a
     left join systypes b on a.xtype=b.xusertype
     inner join sysobjects d on a.id=d.id  and d.xtype='U' and  d.name<>'dtproperties'
     left join syscomments e on a.cdefault=e.id
     left join sysproperties g on a.id=g.id and a.colid=g.smallid  
     left join sysproperties f on d.id=f.id and f.smallid=0
    --where d.name='要查询的表'    --如果只查询指定表,加上此条件
    order by a.id,a.colorder--查看SQLServer数据表的详细信息(SQL2005版)
    Select 
     表名=case when a.colorder=1 then d.name else '' end,
     表说明=case when a.colorder=1 then isnull(f.value,'') else '' end,
     字段序号=a.colorder,
     字段名=a.name,
     标识=case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end,
     主键=case when exists(Select 1 FROM sysobjects where xtype='PK' and name in (
      Select name FROM sysindexes Where indid in(
       Select indid FROM sysindexkeys Where id = a.id AND colid=a.colid
      ))) then '√' else '' end,
     类型=b.name,
     占用字节数=a.length,
     长度=COLUMNPROPERTY(a.id,a.name,'PRECISION'),
     小数位数=isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),
     允许空=case when a.isnullable=1 then '√'else '' end,
     默认值=isnull(e.text,''),
     字段说明=isnull(g.[value],'')
    FROM syscolumns a
     left join systypes b on a.xtype=b.xusertype
     inner join sysobjects d on a.id=d.id  and d.xtype='U' and  d.name<>'dtproperties'
     left join syscomments e on a.cdefault=e.id
     left join sys.extended_properties g on a.id=g.major_id and a.colid=g.minor_id  
     left join sys.extended_properties f on d.id=f.major_id and f.minor_id=0
    --where d.name='要查询的表'    --如果只查询指定表,加上此条件
    order by a.id,a.colorder
      

  7.   

    基于Northwind?
    服务器: 消息 156,级别 15,状态 1,行 1
    在关键字 'Order' 附近有语法错误。
    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: ')' 附近有语法错误。
    改造如下:declare @sql varchar(8000)
    set @sql='select * from ('
    select @sql=@sql+' select name = ''' + name + ''' , count(*) as num from ['+name+'] union all ' from sysobjects where xtype='u'
    set @sql = left(@sql,len(@sql) - 10) + ')a'
    exec(@sql)
    name num
    Orders 830
    Products 77
    Order Details 2155
    CustomerCustomerDemo 0
    CustomerDemographics 0
    Region 4
    Territories 53
    EmployeeTerritories 49
    Employees 9
    Categories 8
    Customers 91
    Shippers 3
    Suppliers 29
      

  8.   

    EXEC sp_MSforeachtable @command1="print '?'",
                 @command2= "SELECT count(*) FROM ? "
      

  9.   

    select name,rows from sysindexes where id = object_id(name) and indid in (0,1) order by rows desc 
      

  10.   


    use db_CMS
    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
      

  11.   

    既然用 ado.net 了, 还直接查询系统表, 有点说不过去。