Ketika prosedur tersimpan dijalankan, prosedur tersebut diurai dan dikompilasi ke dalam rencana kueri, ini di-cache dan Anda dapat mengaksesnya melalui sys.dm_exec_cached_plans dan sys.dm_exec_query_plan dalam format XML. Rencana kueri mencatat 'daftar keluaran' dari setiap bagian kode yang diurai. Melihat kolom mana yang digunakan oleh prosedur tersimpan hanyalah masalah kueri XML ini, seperti ini:
--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')
Peringatan emptor ini tergantung pada bagaimana Anda mendefinisikan 'digunakan'. Mungkin CTE dalam prosedur tersimpan Anda mereferensikan 5 kolom dari sebuah tabel, tetapi kemudian ketika CTE ini digunakan hanya tiga kolom yang diteruskan. Pengoptimal kueri mungkin mengabaikan bidang tambahan ini dan tidak memasukkannya ke dalam rencana. Di sisi lain, pengoptimal dapat memutuskan bahwa ia dapat membuat kueri yang lebih efisien dengan memasukkan bidang tambahan dalam output untuk memungkinkannya menggunakan indeks yang lebih baik di kemudian hari. Kode ini akan mengembalikan kolom yang digunakan oleh rencana kueri, kolom tersebut mungkin tidak persis seperti kolom yang ada dalam kode prosedur tersimpan.