Я создал функцию SQL, которая реализует более быстрой альтернативой COUNT(*)
операции:Строка Функция подсчета всегда возвращает NULL
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
'varchar' без длины? Это не-нет. Попробуйте 'SYSNAME'. –
'varchar' без длины - это просто' varchar (1) '. Возможно, имя вашей таблицы не соответствует одному символу, не так ли? – Luaan
[Плохие привычки пинать: объявление VARCHAR без (длина)] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length .aspx) – GarethD