Немного лучший способ, чем подсчет символов, - это использовать схему информации schema.routines. Вы можете суммировать длину каждого определения подпрограммы следующим образом (обратите внимание, что каждое определение подпрограммы будет максимум в 4000 символов, см. Ниже метод, который не имеет этого ограничения):
select Sum(Len(Routine_Definition)) from information_schema.routines
where routine_type = 'PROCEDURE'
Или вы можете вернуть длину каждого sp
select Len(Routine_Definition), * from information_schema.routines
where routine_type = 'PROCEDURE'
Маловероятно, что длина ваших хранимых процедур является проблемой. Обычно нехватка места в базе данных происходит из-за таких вещей, как отсутствие резервного копирования файла журнала (а затем его сжатие с использованием dbcc shrinkfile или dbcc shrinkdatabase).
В Sql 2000, вот процедура, которая обеспечивает длину без ограничения в 4000 символов, указанного выше:
DECLARE @Name VarChar(250)
DECLARE RoutineCursor CURSOR FOR
select Routine_Name from information_schema.routines where routine_type = 'PROCEDURE'
DECLARE @Results TABLE
( SpName VarChar(250),
SpLength Int
)
CREATE TABLE ##SpText
( SpText VarChar(8000) )
OPEN RoutineCursor
FETCH NEXT FROM RoutineCursor INTO @Name
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO ##SpText (SpText) EXEC sp_helptext @Name
INSERT INTO @Results (SpName, SpLength) (SELECT @Name, Sum(Len(SpText)) FROM ##SpText)
TRUNCATE TABLE ##SpText
FETCH NEXT FROM RoutineCursor INTO @Name
END
CLOSE RoutineCursor
DEALLOCATE RoutineCursor
DROP TABLE ##SpText
SELECT SpName, SpLength FROM @Results ORDER BY SpLength DESC
SELECT Sum(SpLength) FROM @Results