views:

1112

answers:

8

I have a huge database with 100's of tables and stored procedures. Using SQL serve 2005 How can i get the list of Stored procedures that are doing a insert or update operation on a table.

+1  A: 

You could try exporting all of your stored procedures into a text file and then use a simple search.

A more advanced technique would be to use a regexp search to find all SELECT FROM and INSERT FROM entries.

Ilya Kochetov
A: 
SELECT Distinct SO.Name
FROM sysobjects SO (NOLOCK)
INNER JOIN syscomments SC (NOLOCK) on SO.Id = SC.ID
AND SO.Type = 'P'
AND (SC.Text LIKE '%UPDATE%' OR SC.Text LIKE '%INSERT%')
ORDER BY SO.Name

This link was used as a resource for the SP search.

Graphain
+1  A: 

Use sys.dm_sql_referencing_entities

Note that sp_depends is obsoleted.

MSDN Reference

Gareth D
+5  A: 
select
  so.name,
  sc.text
from
  sysobjects so inner join syscomments sc on so.id = sc.id
where
  sc.text like '%INSERT INTO xyz%'
  or sc.text like '%UPDATE xyz%'

This will give you a list of all stored procedure contents with INSERT or UPDATE in them for a particular table (you can obviously tweak the query to suit). Also longer procedures will be broken across multiple rows in the returned recordset so you may need to do a bit of manual sifting through the results.

Edit: Tweaked query to return SP name as well. Also, note the above query will return any UDFs as well as SPs.

Luke Bennett
this is giving me the SP id... can i reach the SP name with this id?
Vinodtiru
Yep, I've tweaked the query to include that. I see there's now a couple of other answers been posted that will get you it as well.
Luke Bennett
My answer here: http://stackoverflow.com/questions/119679/list-of-stored-procedure-from-table#119719 is almost identical (returns name). However, I think Luke is right in that there's no need to use DISTINCT as in my answer
Graphain
It works, but not for every case. For example if somebody uses more spaces or tab characters between the SQL keywords and the table name.
splattne
A: 

This seems to work:

select
so.name as [proc],
so2.name as [table],
sd.is_updated
from sysobjects so
inner join sys.sql_dependencies sd on so.id = sd.object_id
inner join sysobjects so2 on sd.referenced_major_id = so2.id
where so.xtype = 'p' -- procedure
and is_updated = 1 -- proc updates table, or at least, I think that's what this means

Corey Trager
+1  A: 

If you download sp_search_code from Vyaskn's website it will allow you to find any text within your database objects.

http://vyaskn.tripod.com/sql_server_search_stored_procedure_code.htm

Michael Prewecki
A: 

sys.sql_dependencies has a list of entities with dependencies, including tables and columns that a sproc includes in queries. See this post for an example of a query that gets out dependencies. The code snippet below will get a list of table/column dependencies by stored procedure

select sp.name       as sproc_name
      ,t.name        as table_name
      ,c.name        as column_name
 from sys.sql_dependencies d
 join sys.objects t
   on t.object_id = d.referenced_major_id
 join sys.objects sp
   on sp.object_id = d.object_id
 join sys.columns c
   on c.object_id = t.object_id
  and c.column_id = d.referenced_minor_id
where sp.type = 'P'
ConcernedOfTunbridgeWells
A: 

sp_depends is the simple way to find

sp_depends