There are lot of tables and sp in the db. I find the tables name which are used in the specific sp (stored procedure).
sp_depends %sp_name% not give the
The two highest voted answers use a lot of deprecated tables that should be avoided.
Here's a much cleaner way to do it.
SELECT DISTINCT p.name AS proc_name, t.name AS table_name
FROM sys.sql_dependencies d
INNER JOIN sys.procedures p ON p.object_id = d.object_id
INNER JOIN sys.tables t ON t.object_id = d.referenced_major_id
ORDER BY proc_name, table_name
Works with MS SQL SERVER 2005+
object_id instead of idreferenced_major_id instead of depido.xtype = 'p' (etc.)Also, there is really no need for a CTE which uses ROW_NUMBER() just in order to make sure we only have one of each record set returned. That's what DISTINCT is there for!
I submit into evidence: Exhibit A. The following queries have the same Execution Plan!
-- Complex
WITH MyPeople AS (
SELECT id, name,
ROW_NUMBER() OVER(PARTITION BY id, name ORDER BY id, name) AS row
FROM People)
SELECT id, name
FROM MyPeople
WHERE row = 1
-- Better
SELECT DISTINCT id, name
FROM People