Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Vlad_Molodoj Member Откуда: Сообщений: 7 |
Доброго времени суток. Понадобилось мне разработать функцию, которая бы в качестве параметра принимала имя таблицы и возвращала количество записей этой таблицы. Подразумевается, что таблица существует. Нижеприведеный код система пропускает. crete function [dbo].[fnCountRows] (@tblName varchar(max)) returns int as begin declare @res int = 0 declare @Sql nvarchar(max) = 'select @CountRowsOut = count(*) from ' + @tblName + ' (nolock)' exec sp_executesql @Sql, N'@CountLinesOut int output', @CountRowsOut = @res Output return @res end Однако при запуске : declare @c int = dbo.fnCountRows('MyTable') print @c ругается: Only functions and some extended stored procedures can be executed from within a function. Как обойти обойти это ограничение? Понятно, что можно написать хранимую процедуру, которая возвращает количество строк во втором параметре с признаком Output Может кому известны иные варианты? Заранее благодарен за ответы |
30 июл 18, 23:55 [21616379] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
Откройте для себя sys.partitions и иже с нею. |
31 июл 18, 00:02 [21616381] Ответить | Цитировать Сообщить модератору |
komrad Member Откуда: Сообщений: 5516 |
+ sys.dm_db_index_physical_stats |
||
31 июл 18, 00:03 [21616382] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |