sql 查询某个库中的每个表的记录行数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 查询某个库中的每个表的记录行数相关的知识,希望对你有一定的参考价值。

打比方XX数据库中,有很多张表 我想通过一个语句 可以知道每个表都有多少行记录,请问怎么写呢

select d.name as 表名,COUNT (*)as 记录 from syscolumns a inner join sysobjects d on a.id = d.id and d.xtype = 'U'
group by d.name
这是sqlserver 实现的,不知道符不符合。不过刚刚验证了一下,不是很对,估计是主键的原因,修改好了再看看
以上语句只能测试出部分,这个存储过程可以实现全部,sqlserver直接执行即可:
create table #temp(Recordcount int ,tableName varchar(30))
declare @tablename varchar(30)
declare @sql varchar(100)
declare @str varchar(30)
declare tablecursor cursor for
select name from sysobjects where xtype='u'
open tablecursor
fetch next from tablecursor into @tablename
while @@fetch_status=0
begin
set @str=@tablename
set @sql='insert into #temp(recordcount,tablename) select count(*),'+''''+@tablename+''''+' from '+@tablename
exec(@sql)
fetch next from tablecursor into @tablename
end
close tablecursor
deallocate tablecursor
select * from #temp drop table #temp追问

能不能写个语句,出来的结果就是 表名,所有行数,这样的结果啊 感谢大侠

追答

create table #temp(Recordcount int ,tableName varchar(30))
declare @tablename varchar(30)
declare @sql varchar(100)
declare @str varchar(30)
declare tablecursor cursor for
select name from sysobjects where xtype='u'
open tablecursor
fetch next from tablecursor into @tablename
while @@fetch_status=0
begin
set @str=@tablename
set @sql='insert into #temp(recordcount,tablename) select count(*),'+''''+@tablename+''''+' from '+@tablename
exec(@sql)
fetch next from tablecursor into @tablename
end
close tablecursor
deallocate tablecursor
select * from #temp drop table #temp
就这个语句,执行完就出结果了,sqlserver的,其他的数据库的没尝试

参考技术A 最简单的是这个:
select a.name as '表名',b.rows as '表数据行数'
from sysobjects a inner join sysindexes b
on a.id = b.id
where a.type = 'u'
and b.indid in (0,1)
order by b.rows desc
亲测OK。
参考技术B 如果你的每个表都有聚集索引,可以通过 select * from sysindexes,查看rows列。追问

找是找到了,但不是我想要的结果,麻烦再问下,能不能写个语句,出来的结果就是 表名,所有行数,这样的结果啊 感谢大侠

参考技术C Oracle数据库是 SELECT TABLE_NAME ,NUM_ROWS FROM USER_TABLES。
但是在使用这个之前,需要进行一下数据收集。要不信息有点误差哦。是上次数据统计的结果。

delphi中的SQL语句

delphi中,如何在某个条件(如在序号在库中有记录)下执行修改数据库的语句,在另一条件(序号在库中没有记录)下执行插入数据库的语句

用ADO的表或查询或数据集组件,步骤:1,关闭组件;2,清除其中的SQL语句;3,写入新的SQL语句;4,打开组件;此时你就可以看到有无记录,如果有置ADO组件于编辑状态edit,即可修改记录,如果没有记录,则置ADO组件于增加数据状态apped,先对数据集组件连接表的各个字段赋值,然后保存。
SQL语句:
select 字段1,字段2,。。。字段n from 表名 where 序号=‘123’
参考技术A 建立一个数组t,把表的序号sql出来全部赋值给数组,用textedit控件输入要更新的数据记录字段,在序号的textedit.onexit事件将序号的textedit.text赋给一个变量x,将变量x循环对比数组t的值
t[i,0],当x=t[i,0],执行update语句,else执行insert语句。这方法只能在数据量不大的情况下使用,量大的运行会很慢,因为等于需要和全表记录进行循环对比
参考技术B select * from 表A where 序号 in(selcet 序号 from 表B group by 序号 ) 参考技术C 先做一次查询,有的话就做update,没有就insert。

以上是关于sql 查询某个库中的每个表的记录行数的主要内容,如果未能解决你的问题,请参考以下文章

求快速统计SQL Server 某个库里所有表的方法,count() 函数很慢的。

查询数据库和表的大小

基于最近时间戳连接两个表的 SQL 查询

oracle查询一个用户下有多少张表

如何快捷地查询Oracle中每个用户表的表名和行数?

Oracle_SQL 连接和子查询