Gdy procedura składowana jest wykonywana, jest analizowana i kompilowana do planu zapytania, jest buforowana i można uzyskać do niej dostęp za pośrednictwem sys.dm_exec_cached_plans i sys.dm_exec_query_plan w formacie XML. Plan zapytania rejestruje „listę wyników” każdej sekcji przeanalizowanego kodu. Sprawdzenie, które kolumny są używane przez procedurę składowaną, to tylko kwestia odpytywania tego kodu XML, na przykład:
--Execute the stored procedure to put its query plan in the cache
exec sys.sp_columns ''
DECLARE @TargetObject nvarchar(100) = 'sys.sp_columns';
WITH XMLNAMESPACES (
'http://schemas.microsoft.com/sqlserver/2004/07/showplan' as ns1
), CompiledPlan AS (
SELECT
(SELECT query_plan FROM sys.dm_exec_query_plan(cp.plan_handle)) qp,
(SELECT ObjectID FROM sys.dm_exec_sql_text(cp.plan_handle)) ob
FROM sys.dm_exec_cached_plans cp
WHERE objtype = 'Proc'
), ColumnReferences AS (
SELECT DISTINCT
ob,
p.query('.').value('./ns1:ColumnReference[1]/@Database', 'sysname') AS [Database],
p.query('.').value('./ns1:ColumnReference[1]/@Schema', 'sysname') AS [Schema],
p.query('.').value('./ns1:ColumnReference[1]/@Table', 'sysname') AS [Table],
p.query('.').value('./ns1:ColumnReference[1]/@Column', 'sysname') AS [Column]
FROM CompiledPlan
CROSS APPLY qp.nodes('//ns1:ColumnReference') t(p)
)
SELECT
[Database],
[Schema],
[Table],
[Column]
FROM ColumnReferences
WHERE
[Database] IS NOT NULL AND
ob = OBJECT_ID(@TargetObject, 'P')
Ostrzeżenie zależy to od tego, jak zdefiniujesz „używany”. Może się zdarzyć, że CTE w procedurze składowanej odwołuje się do 5 kolumn z tabeli, ale gdy to CTE jest używane, przekazywane są tylko trzy kolumny. Optymalizator zapytań może zignoruj te dodatkowe pola i nie uwzględniaj ich w planie. Z drugiej strony optymalizator może zdecydować, że może wykonać bardziej wydajne zapytanie, dołączając dodatkowe pola do wyniku, aby umożliwić późniejsze użycie lepszego indeksu. Ten kod zwróci kolumny używane przez plan zapytania, mogą one nie być dokładnie kolumnami, które znajdują się w kodzie procedury składowanej.