我创建了一个SQL函数,它实现了COUNT(*)
操作的更快替代方法:
create function fast_row_count (@table_name varchar)
returns bigint
as
begin
declare @row_count int;
set @row_count =
(select sum(row_count) from sys.dm_db_partition_stats with (nolock) where object_id = object_id(@table_name));
return @row_count
end
go
执行时,它总是返回NULL值。
select dbo.fast_row_count('tbl_calls')
但是,当作为具有硬编码值的单独批处理执行时,它可以正常工作:
declare @row_count int;
set @row_count =
(select sum(row_count) from sys.dm_db_partition_stats with (nolock) where object_id = object_id('tbl_calls'));
print @row_count
答案 0 :(得分:2)
create function fast_row_count (@table_name varchar (max))
由于你定义了varchar而没有定义它的长度所以它给出了null
varchar [(n | max)]
可变长度的非Unicode字符串数据。 n定义字符串长度,可以是1到8,000之间的值。 max表示最大存储大小为2 ^ 31-1个字节(2 GB)。存储大小是输入数据的实际长度+ 2个字节。 varchar的ISO同义词是char变化或字符变化。
<强>说明强>
如果在数据定义或变量声明语句中未指定n,则默认长度为1.使用CAST和CONVERT函数时未指定n时,默认长度为30.
了解更多信息