유용한 쿼리문 MSSQL - 3

반응형

(1) 특정 저장프로시저에서 사용하는 테이블 목록

DECLARE @v_SPName NVARCHAR(50)


SET @v_SPName = 'usp_web_UserProcess'


;WITH stored_procedures AS 
(    
SELECT oo.name AS TABLE_NAME,    
ROW_NUMBER() OVER(PARTITION BY o.name, oo.name ORDER BY o.name, oo.name) AS row    
FROM sysdepends AS d    
INNER JOIN sysobjects AS o ON o.id = d.id    
INNER JOIN sysobjects AS oo ON oo.id = d.depid    
WHERE o.xtype = 'P' AND o.name LIKE '%' + @v_SPName + '%' AND oo.xtype = 'U' 
)
SELECT TABLE_NAME FROM stored_procedures WHERE row = 1 ORDER BY TABLE_NAME ASC

 

(2) 테이블 별 ROW 수 얻기



SELECT o.name AS [TableName], 
REPLACE(CONVERT(NVARCHAR(50), CAST(i.rows AS MONEY), 1), '.00', '') AS [RowCount]
FROM sys.sysindexes AS i
INNER JOIN sys.sysobjects AS o 
ON i.id = o.id
WHERE i.indid < 2 AND o.xtype = 'U'
ORDER BY i.rows DESC

 

(3) 테이블 별 용량 얻기



SELECT MIN(o.name) AS [TableName], 
(LTRIM(STR(ROUND(SUM(CAST(i.reserved AS BIGINT)) * 8192 / 1024.0 / 1024.0, 2), 15, 2)) + ' MB') AS [TableSize(MB)]
FROM sys.sysindexes AS i 
INNER JOIN sys.sysobjects AS o
ON o.id = i.id
WHERE i.indid IN(0, 1, 255) AND o.xtype = 'U' 
GROUP BY i.id
ORDER BY SUM(CAST(i.reserved AS BIGINT)) DESC

 

(4) ROW 수 많은 순서대로 해당 테이블을 사용하는 저장프로시저 얻기



SELECT m.[TABLE_NAME], REPLACE(CONVERT(NVARCHAR(50), CAST(m.[TABLE_ROW_COUNT] AS MONEY), 1), '.00', '') AS [TABLE_ROW_COUNT], n.[SP_NAME] 
FROM
(
    SELECT a.[TABLE_NAME], a.[TABLE_ROW_COUNT], b.[DEP_OBJECT_ID] 
    FROM
    (
        SELECT o.id AS [OBJECT_ID], o.name AS [TABLE_NAME], i.rows AS [TABLE_ROW_COUNT]
        FROM sys.sysindexes AS i
        INNER JOIN sys.sysobjects AS o
        ON o.id = i.id 
        WHERE o.xtype = 'U' AND o.name <> 'sysdiagrams' AND i.indid < 2
    ) AS a 
    INNER JOIN
    (
        SELECT id AS [DEP_OBJECT_ID], depid AS [DEP_ID] 
        FROM sysdepends
    ) AS b
    ON a.[OBJECT_ID] = b.[DEP_ID]
) AS m
INNER JOIN
(
    SELECT id AS [SP_OBJECT_ID], name AS [SP_NAME] 
    FROM sysobjects 
    WHERE xtype = 'P'
) AS n
ON m.[DEP_OBJECT_ID] = n.[SP_OBJECT_ID]
WHERE m.[TABLE_ROW_COUNT] > 0
GROUP BY m.[TABLE_NAME], m.[TABLE_ROW_COUNT], n.[SP_NAME] 
ORDER BY m.[TABLE_ROW_COUNT] DESC, m.[TABLE_NAME] ASC, n.[SP_NAME] ASC
 
 
반응형