SQL函数传表名作为参数取表内的记录数

分类:数据库
 标签:sysindexes,表名参数,SQL函数
   修改 | 阅读(1032)| 评论(0)

因函数中不能执行动态SQL语句,表名也不能作为参数来用(select * from @tablename 会报错),所以用以下方法。

CREATE FUNCTION [dbo].[GetTableRows](@tablename varchar(50))
returns  int
AS
BEGIN   
	DECLARE @c int
	set @c=0 
	select @c=rows from sysindexes where indid in (0,1) and object_name(id)=@tablename
	return @c
END


附sysindexes视图的明细信息

数据库中的每个索引和表在表中各占一行。该表存储在每个数据库中。

列名数据类型描述
idint表 ID(如果 indid = 0 或 255)。否则为索引所属表的 ID。
statusint内部系统状态信息。
firstbinary(6)指向第一页或根页的指针。
indidsmallint索引 ID:

1 = 聚集索引
>1 = 非聚集
255 = 具有 text 或 image 数据的表条目

rootbinary(6)如果 indid >= 1 和 < 255,root 是指向根页的指针。如果 indid = 0 或 indid = 255,root 是指向最后一页的指针。
minlensmallint最小行大小。
keycntsmallint键的数目。
groupidsmallint在其上创建对象的文件组 ID。
dpagesint如果 indid = 0 或 indid = 1,dpages 是已用数据页的计数。如果 indid = 255,其设置为 0。否则是已用索引页的计数。
reservedint如果 indid = 0 或 indid = 1,reserved是分配给所有索引和表数据的页计数。如果indid = 255,reserved 是分配给 text或 image 数据的页计数。否则是分配给索引的页计数。
usedint如果 indid = 0 或 indid = 1,used 是用于所有索引和表数据的总页数。如果 indid = 255,used 是用于 text 或 image 数据的页计数。否则是用于索引的页计数。
rowcntbigint基于 indid = 0 和 indid = 1 的数据级行计数。如果 indid = 255,rowcnt 设置为 0。
rowmodctrint对自上次更新表的统计后插入、删除或更新行的总数进行计数。
xmaxlensmallint最大行大小。
maxirowsmallint最大非叶索引行大小。
OrigFillFactortinyint创建索引时使用的起始填充因子值。不保留该值;然而,如果需要重新创建索引但记不住当初使用的填充因子,则该值可能很有帮助。
reserved1tinyint保留。
reserved2int保留。
FirstIAMbinary(6)保留。
impidsmallint保留。索引实现标志。
lockflagssmallint用于约束经过考虑的索引锁粒度。例如,对于本质上是只读的查找表,可以将其设置为仅进行表级锁定以使锁定成本减到最小。
pgmodctrint保留。
keysvarbinary(816)组成索引键的列 ID 列表。
namesysname表名(如果 indid = 0 或 255)。否则为索引的名称。
statblobimage统计 BLOB。
maxlenint保留。
rowsint基于 indid = 0 和 indid = 1的数据级行数,该值对于 indid >1 重复。如果 indid= 255,rows 设置为 0。提供该列是为了向后兼容。


您的昵称:*
QQ登录(无需注册直接登录可进行回复)
您的邮箱:(填写邮箱,如有回复可进行邮件通知)
验证码:
点击刷新