Saltar al contenido

¿Cómo calculo el TAMAÑO de los procedimientos almacenados en SQL Server 2005?

Solución:

;WITH ROUTINES AS (
    -- CANNOT use INFORMATION_SCHEMA.ROUTINES because of 4000 character limit
    SELECT o.type_desc AS ROUTINE_TYPE
            ,o.[name] AS ROUTINE_NAME
            ,m.definition AS ROUTINE_DEFINITION
    FROM sys.sql_modules AS m
    INNER JOIN sys.objects AS o
        ON m.object_id = o.object_id
)
SELECT SUM(LEN(ROUTINE_DEFINITION))
FROM ROUTINES

Una forma ligeramente mejor que contar los caracteres es utilizar esquemas de información. Puede sumar la longitud de cada definición de rutina como (tenga en cuenta que cada definición de rutina tendrá un máximo de 4000 caracteres, consulte a continuación un método que no tiene esta restricción):

select Sum(Len(Routine_Definition)) from information_schema.routines 
where routine_type="PROCEDURE"

O puede devolver la longitud de cada sp.

select Len(Routine_Definition), * from information_schema.routines 
where routine_type="PROCEDURE"

Es poco probable que la longitud de sus procedimientos almacenados sea el problema. Por lo general, quedarse sin espacio con una base de datos se debe a cosas como no hacer una copia de seguridad del archivo de registro (y luego reducirlo usando dbcc shrinkfile o dbcc shrinkdatabase).

En Sql 2000, aquí hay una rutina que proporcionaría la longitud sin el límite de 4000 caracteres anterior:

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

La solución de Dave_H alcanza un límite de 4000 caracteres en la tabla information_schema.routines

Pruebe esto, primero genere la tabla a con el texto completo de los sprocs, luego sume las longitudes de los caracteres.

--create a temp table to hold the data
create table ##sptext (sptext varchar(1000))
go

--generate the code to insert the full text of your sprocs
select 'insert into ##sptext (sptext) exec sp_helptext '''+specific_name+''';'
from information_schema.routines 
where routine_type="PROCEDURE"
go

/*Copy the output back to your query analyzer and run it*/

--now sum the results    
select sum(len(sptext))
from ##sptext
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *