统计用户数据库内所有表的行数
曾经写过博文介绍利用代理表统计数据库内所有表占用空间情况,也包括表的行数:
可以参考:ASE15.0中利用代理表实现统计用户表存储空间大小的功能
配置代理表可能有些麻烦,本文提供一个简单的脚本来获得数据库内表的行数。
#!/bin/bash
ISQL="isql -Usa -P -SSYBASE -w5000"
database_name="tpchdb"$ISQL <<EOF | sed -e '1,2d' -e 's/^ *//;s/ *$//' -e '/^$/d' > tablename.list
use ${database_name}
go
set nocount on
go
select name from sysobjects where type='U' order by name
go
quit
EOFwhile read table_name
do
if [ "${table_name}" = "" ]; then
break
fi
$ISQL <<EOF | grep "=" | sed -e 's/^ *//;s/ *$//;s/= */=/'
use ${database_name}
go
set nocount on
go
select "${table_name}=",count(*) from ${table_name}
go
quit
EOF
done < tablename.list
echo "Table Count:`wc -l tablename.list|awk '{print $1}'`"
rm -f tablename.list
使用的时候,仅仅需要修改一下红色标记的用户名、密码、服务器名称、数据库名称即可。
当然你也可以只统计相应的表的行数,修改select name from sysobjects where type='U' order by name,比如:name like 'flow_%' and crdate > '2014-01-01'
另外,如果不想用脚本而在TSQL中实现的话,可能得用到游标了。
脚本tablerowcount.sh下载地址。