Tengo una gran base de datos con cientos de tablas y procedimientos almacenados. Con SQL Server 2005, ¿cómo puedo obtener una lista de procedimientos almacenados que realizan una operación de inserción o actualización en una tabla determinada?Lista de procedimientos almacenados de la tabla
Respuesta
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%'
Esto le dará una lista de todos los contenidos de procedimientos almacenados con INSERT o UPDATE en ellos por una tabla en particular (es obvio que puede modificar la consulta para que se adapte). También los procedimientos más largos se dividirán en varias filas en el conjunto de registros devuelto, por lo que es posible que deba realizar un análisis manual de los resultados.
Editar: Consulta ajustada para devolver el nombre de SP también. Además, tenga en cuenta que la consulta anterior devolverá cualquier UDF así como también SP.
Puede intentar exportar todos sus procedimientos almacenados en un archivo de texto y luego usar una búsqueda simple.
Una técnica más avanzada sería utilizar una búsqueda de expresiones regulares para buscar todas las entradas SELECT FROM e INSERT FROM.
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 se usó como un recurso para la búsqueda de SP.
Esto parece funcionar:
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
Si se descarga desde el sitio web de sp_search_code Vyaskn que le permitirá encontrar cualquier texto dentro de los objetos de base de datos.
http://vyaskn.tripod.com/sql_server_search_stored_procedure_code.htm
sys.sql_dependencies
tiene una lista de entidades con las dependencias, incluyendo las tablas y columnas que incluye un procedimiento almacenado en las consultas. Consulte this post para ver un ejemplo de una consulta que obtiene dependencias. El siguiente fragmento de código obtendrá una lista de dependencias tabla/columna mediante el procedimiento almacenado
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'
El [MSDN Library] (http://msdn.microsoft.com/en-us/library/ms174402.aspx) dice que esto ahora está en desuso y debe reemplazarse por sys.sql_expression_dependencies. Desafortunadamente no puedo obtener el equivalente al trabajo. En la consulta que se muestra en la respuesta d.object_id ya no existe. Intenté d.referencing_id pero tampoco funcionó. ¿Alguna idea de cómo usar sql_expression_dependencies? – Drew
En 'sys.sql_expression_dependencies',' referencing_id' es el elemento que hace referencia al destino, y 'referenced_id' es la dependencia. La tabla también tiene nombres de esquema y entidad para las entidades a las que se hace referencia en la tabla. Los ID menores se refieren a los números de columna, donde 0 indica que no hay una referencia de columna en particular. – ConcernedOfTunbridgeWells
Creo que tengo todo eso abajo. Creo que el problema es que todas mis filas sql_expression_dependencies tienen un 0 para referenced_minor_id. La consulta análoga de sql_dependencies devolvió muchas filas distintas de cero y me sorprende que los resultados sean tan diferentes como lo son. Parece efectivamente que hace sql_expression_dependencies mucho menos útil porque a menudo quiero ver qué sprocs están haciendo referencia a una columna específica. Como referencia, hice un recuento selectivo (*) de ambos donde se hace referencia a_menor_id <> 0. Hay 38119 filas en sql_dependencies y 112 en sql_expression_dependencies. – Drew
- 1. herramienta generador de procedimientos almacenados
- 2. de consulta a la lista todos los procedimientos almacenados
- 3. Versiones de procedimientos almacenados
- 4. Funciones vs procedimientos almacenados
- 5. Procedimientos almacenados de MySql: ¿cómo seleccionar desde la tabla de procedimientos?
- 6. Patrones para procedimientos almacenados?
- 7. Procedimientos almacenados y funciones
- 8. Lista de procedimientos almacenados/funciones Línea de comandos de Mysql
- 9. Procedimientos almacenados - Fin de días
- 10. Recuperando una lista filtrada de procedimientos almacenados usando t-sql
- 11. WebMatrix y procedimientos almacenados
- 12. Procedimientos almacenados Ingeniería inversa
- 13. Tablas temporales en procedimientos almacenados
- 14. procedimientos almacenados con sqlAlchemy
- 15. Procedimientos almacenados vs. Vistas
- 16. Mejores prácticas de estructuración de procedimientos almacenados
- 17. Mejores prácticas: registro de procedimientos almacenados
- 18. MySQL: Vistas vs Procedimientos almacenados
- 19. [MySQL]: Procedimientos almacenados y sentencias de selección
- 20. Cómo pasar la lista de objetos de Java a procedimientos almacenados de Oracle utilizando MyBatis?
- 21. Uso de procedimientos almacenados en rieles
- 22. Permisos de procedimientos almacenados de MySQL
- 23. Procedimientos almacenados a archivos .sql
- 24. ¿Puede tener demasiados procedimientos almacenados?
- 25. ¿Cómo usar variables locales en procedimientos almacenados?
- 26. Expresiones regulares en procedimientos almacenados
- 27. Procedimientos almacenados y pruebas unitarias
- 28. consultas parametrizadas SIN procedimientos almacenados?
- 29. ¿El SQL formado dinámicamente en los procedimientos almacenados niega el propósito mismo de los procedimientos almacenados?
- 30. cambios de versión para procedimientos almacenados
esto me da la id. SP ... ¿puedo llegar al nombre SP con esta identificación? – Vinodtiru
Sí, he modificado la consulta para incluir eso. Veo que ahora se han publicado un par de respuestas más que también obtendrán. –
Mi respuesta aquí: http://stackoverflow.com/questions/119679/list-of-stored-procedure-from-table#119719 es casi idéntico (devuelve el nombre). Sin embargo, creo que Luke tiene razón en que no es necesario usar DISTINCT como en mi respuesta –