行计数功能始终返回NULL

时间:2015-02-24 09:29:16

标签: sql sql-server tsql

我创建了一个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

1 个答案:

答案 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.

了解更多信息

https://msdn.microsoft.com/en-IN/library/ms176089.aspx