1. 求快速统计sql Server 某个库里所有表的方法,count() 函数很慢的。
我们都知道用聚合函数count()可以统计表的行数。如果需要统计数据库每个表各自的行数(DBA可能有这种需求),用count()函数就必须为每个表生成一个动态SQL语句并执行,才能得到结果。以前在互联网上看到有一种很好的解决方法,忘记出处了,写下来分享一下。
该方法利用了sysindexes 系统表提供的rows字段。rows字段记录了索引的数据级的行数。解决方法的代码如下:
select schema_name(t.schema_id) as [Schema], t.name as TableName,i.rows as [RowCount]
from sys.tables as t, sysindexes as i
where t.object_id = i.id and i.indid <=1
该方法连接了sys.tables视图,从中找出表名和schema_id,再通过schema_name函数获取表的架构名。筛选条件i.indid <=1 只选聚集索引或者堆,每个表至少有一个堆或者聚集索引,从而保证为每个表返回一行。以下是在我的AdventureWorks数据库中运行该查询返回的部分结果:
Schema TableName RowCount
——————– ——————– ———–
Sales Store 701
Proction ProctPhoto 101
Proction ProctProctPhoto 504
Sales StoreContact 753
Person Address 19614
Proction ProctReview 4
Proction TransactionHistory 113443
Person AddressType 6
该方法的优点有:
1.运行速度非常快。
2.由于不访问用户表,不会在用户表上放置锁,不会影响用户表的性能。
3.可以将该查询写成子查询、CTE或者视图,与其它查询结合使用。
望采纳
2. 如何知道数据库中每个表有多少行
select a.name,b.rows from sysobjects a
inner join sysindexes b on a.id=b.id
where a.type='u' and b.indid in (0,1)
3. 如何用SQL语句求oracle 数据库所有表的行数
可以从表user_tables中查询。
select
sum(num_rows)
from
user_tables
;
就是显示用户所有表的行数其中num_rows是每个表的行数,用sum加总一下,就是当前用户所有表的总行数。
但因为user_tables中的数据不是实时统计,会有时间差,所以以上Sql统计得到的结果与实际会存在一定误差。
4. 如何在SQL查询分析器里运行查找其中一个数据库内的所有表的行数
我的答案你还不能得到结果吗?我在SQL SERVER 2000下面测试通过,取到的结果都是正确的
刚刚想了一下,如果你要查行数的话,用这个SQL
drop table #T
CREATE TABLE #T ([name] nvarchar(255),rows bigint)
DECLARE @Name nvarchar(255),@Sql nvarchar(4000)
DECLARE TName CURSOR FOR
SELECT [name] FROM sysobjects WHERE xtype = 'U'
OPEN TName
FETCH NEXT FROM TName
INTO @Name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Sql='INSERT INTO #T ([name],rows) SELECT '''+@name+''' AS name, COUNT(1) AS row FROM '+@name
EXEC(@Sql)
FETCH NEXT FROM TName INTO @name
END
CLOSE TName
DEALLOCATE TName
SELECT * FROM #T
5. 如何快捷地查询SQL SERVER中每个用户表的表名和行数
执行一下就可以了
CREATE TABLE #T ([name] nvarchar(255),rows bigint)
DECLARE @Name nvarchar(255),@Sql nvarchar(4000)
DECLARE TName CURSOR FOR
SELECT [name] FROM sysobjects WHERE xtype = 'U'
OPEN TName
FETCH NEXT FROM TName
INTO @Name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Sql='INSERT INTO #T ([name],rows) SELECT '''+@name+''' AS name, COUNT(1) AS row FROM '+@name
EXEC(@Sql)
FETCH NEXT FROM TName INTO @name
END
CLOSE TName
DEALLOCATE TName
SELECT * FROM #T
6. MS SQL 如何查看一个数据库中所有表的行数
[摘要]本文介绍通过查询系统表sysobjects和sysindexes实现MS SQL 查看一个数据库中所有表的行数,并提供简单的示例代码供参考。
7. sql 查询某个库中的每个表的记录行数
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
8. SQL server中的表, 最大行数和列数分别是多少
在SQL
server2000中,一个数据库中最多可以创建20亿个表,每个表最多可以定义1024个列(字段),每行最多可以存储8060字节,表的行数及总大小仅受可用存储空间的限制。
9. 如何sql语句查询出数据库每个表的几条数据
---方法1:
selectcount(1)from[表名]
---方法2:
selectschema_name(t.schema_id)as[Schema],t.nameas[表名],i.rowsas[总行数]
fromsys.tablesast,sysindexesasi
wheret.object_id=i.idandi.indid<=1
请试一试,如有疑问,及时沟通!