12/24/2018 04:40:00 p. m.
Share:
Blog Informático sobre Análisis y Desarrollo de Software.
--
--
INSERT INTO tabla (campo1, campo2) VALUES ('f1c1', 'f1c2'), ('f2c1', 'f2c2'),('f3c1', 'f3c2');
-- -- INSERT INTO MyTable (FirstCol, SecondCol) SELECT 'f1c1' , 'f1c2' UNION ALL SELECT 'f2c1' , 'f2c2' UNION ALL SELECT 'f3c1' , 'f3c2' UNION ALL SELECT 'f4c1' , 'f4c2' UNION ALL SELECT 'f5c1' , 'f5c2' GO
--
--
--
--Cursor que contiene todos los objetos que ocupan espacio
DECLARE objects_cursor CURSOR LOCAL FAST_FORWARD READ_ONLY for
SELECT s.name + '.' + o.name from sys.schemas s
INNER JOIN sys.objects o
ON o.schema_id = s.schema_id
WHERE
o.type = 'S' or --Tablas de sistema
o.type = 'U' or --Tablas de usuario
o.type = 'V' or --Vistas (solo las indexadas devuelven tamaño)
o.type = 'SQ' or --Cola de servicio
o.type = 'IT' -- Tablas internas usadas p.e. por el Service Broker o los indices XML
--Tabla temporal para albergar los resultados
CREATE TABLE #results
(name_with_schema SYSNAME,
name SYSNAME, rows CHAR(11),
reserved VARCHAR(18), data VARCHAR(18),
index_size VARCHAR(18),Unused VARCHAR(18))
DECLARE @resultado AS TABLE
(name SYSNAME, rows CHAR(11),
reserved VARCHAR(18), data VARCHAR(18),
index_size VARCHAR(18),Unused VARCHAR(18))
--Recorremos el cursor obteniendo la información de espacio ocupado
DECLARE @object_name AS SYSNAME
OPEN objects_cursor
FETCH NEXT FROM objects_cursor
INTO @object_name;
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO @resultado
EXEC sp_spaceused @object_name
INSERT INTO #results
SELECT @object_name, x.*
from @resultado as x
delete from @resultado
FETCH NEXT FROM objects_cursor
INTO @object_name;
END;
CLOSE objects_cursor;
DEALLOCATE objects_cursor;
-- Quitamos "KB" para poder ordenar
UPDATE
#results
SET
reserved = LEFT(reserved,LEN(reserved)-3),
data = LEFT(data,LEN(data)-3),
index_size = LEFT(index_size,LEN(index_size)-3),
Unused = LEFT(Unused,LEN(Unused)-3)
--Ordenamos la información por el tamaño ocupado
SELECT
name_with_schema,
Name,
reserved AS [Tamaño en Disco (KB)],
data AS [Datos (KB)],
index_size AS [Indices (KB)],
Unused AS [No usado (KB)],
Rows AS Filas FROM #results
ORDER BY
name_with_schema,
name,
CONVERT(bigint, reserved) DESC
drop table #results
-- -- CREATE PROCEDURE [dbo].[PROC_HABILITAR_DESHABILITAR_TRIGGERS_BASE] @HABILITAR bit = 1 AS DECLARE @string VARCHAR(8000) DECLARE @NombreTabla NVARCHAR(500) DECLARE @NombreEsquema NVARCHAR(500) DECLARE @instruccion NVARCHAR(500) SET @instruccion = CASE WHEN @HABILITAR = 1 THEN 'ENABLE' ELSE 'DISABLE' END DECLARE cur CURSOR FOR SELECT DISTINCT sch.name AS nombre_esquema, ta.name as 'nombre_tabla' FROM sys.objects tr INNER JOIN sys.schemas sch ON tr.schema_id = sch.schema_id inner join sys.objects ta on tr.parent_object_id = ta.object_id where tr.type = 'TR' order by sch.name, ta.name OPEN cur FETCH next FROM cur INTO @NombreEsquema, @NombreTabla WHILE @@fetch_status = 0 BEGIN SET @string ='Alter table '+ @NombreEsquema + '.'+@NombreTabla + ' ' + @instruccion + ' trigger all' EXEC (@string) FETCH next FROM cur INTO @NombreEsquema, @NombreTabla END CLOSE cur DEALLOCATE cur GO