ver una todas tablas tabla saber relacionadas registro que procedimiento para objetos listar las estan datos dato como codigo campo buscar bases almacenado sql sql-server select find columnname

una - procedimiento almacenado para buscar un registro en sql



Encuentre todos los procedimientos almacenados que hacen referencia a una columna especĂ­fica en alguna tabla (8)

Tengo un valor en una tabla que cambió inesperadamente. La columna en cuestión es CreatedDate : se establece cuando se crea mi elemento, pero está siendo modificado por un procedimiento almacenado.

¿Podría escribir algún tipo de instrucción SELECT para obtener todos los nombres de procedimientos que hacen referencia a esta columna de mi tabla?


Puede usar la consulta siguiente para identificar los valores. Pero tenga en cuenta que esto no le dará los resultados del procedimiento almacenado encriptado.

SELECT DISTINCT OBJECT_NAME(comments.id) OBJECT_NAME ,objects.type_desc FROM syscomments comments ,sys.objects objects WHERE comments.id = objects.object_id AND TEXT LIKE ''%CreatedDate%'' ORDER BY 1


Puede usar ApexSQL Search , es un complemento gratuito de SSMS y Visual Studio y puede enumerar todos los objetos que hacen referencia a una columna de tabla específica. También puede encontrar datos almacenados en tablas y vistas. Puede filtrar fácilmente los resultados para mostrar un tipo de objeto de base de datos específico que haga referencia a la columna

Descargo de responsabilidad: trabajo para ApexSQL como ingeniero de soporte


Puede usar las vistas del sistema contenidas en information_schema para buscar en tablas , vistas y procedimientos almacenados (sin cifrar) con una secuencia de comandos. Desarrollé un script de este tipo hace algún tiempo porque necesitaba buscar nombres de campo en todas partes en la base de datos.

La siguiente secuencia de comandos enumera las tablas / vistas que contienen el nombre de la columna que está buscando y luego el código fuente de los procedimientos almacenados donde se encuentra la columna. Muestra el resultado en una tabla que distingue "BASE TABLE", "VIEW" y "PROCEDURE" , y (opcionalmente) el código fuente en una segunda tabla:

DECLARE @SearchFor nvarchar(max)=''%CustomerID%'' -- search for this string DECLARE @SearchSP bit = 1 -- 1=search in SPs as well DECLARE @DisplaySPSource bit = 1 -- 1=display SP source code -- tables if (@SearchSP=1) begin ( select ''[''+c.table_Schema+''].[''+c.table_Name+''].[''+c.column_name+'']'' [schema_object], t.table_type from information_schema.columns c left join information_schema.Tables t on c.table_name=t.table_name where column_name like @SearchFor union select ''[''+routine_Schema+''].[''+routine_Name+'']'' [schema_object], ''PROCEDURE'' as table_type from information_schema.routines where routine_definition like @SearchFor and routine_type=''procedure'' ) order by table_type, schema_object end else begin select ''[''+c.table_Schema+''].[''+c.table_Name+''].[''+c.column_name+'']'' [schema_object], t.table_type from information_schema.columns c left join information_schema.Tables t on c.table_name=t.table_name where column_name like @SearchFor order by c.table_Name, c.column_name end -- stored procedure (source listing) if (@SearchSP=1) begin if (@DisplaySPSource=1) begin select ''[''+routine_Schema+''].[''+routine_Name+'']'' [schema.sp], routine_definition from information_schema.routines where routine_definition like @SearchFor and routine_type=''procedure'' order by routine_name end end

Si ejecuta la consulta, use la opción "resultado como texto", luego puede usar "buscar" para ubicar el texto de búsqueda en el conjunto de resultados (útil para el código fuente largo).

Tenga en cuenta que puede establecer @DisplaySPSource en 0 si solo desea mostrar los nombres SP, y si solo está buscando tablas / vistas, pero no para SP, puede establecer @SearchSP en 0 .

Ejemplo de resultado (busque CustomerID en la base de datos Northwind, los resultados se muestran a través de LinqPad):

Tenga en cuenta que he verificado este script con una vista de prueba dbo.TestOrders y encontró el dbo.TestOrders CustomerID en esta vista aunque c.* Se usó en la declaración SELECT (la tabla referenciada Customers contiene el CustomerID y por lo tanto, la vista muestra esta columna) .


Si desea obtener procedimientos almacenados utilizando solo una columna específica, puede utilizar esta consulta:

SELECT DISTINCT Name FROM sys.Procedures WHERE object_definition(OBJECT_ID) LIKE ''%CreatedDate%'';

Si desea obtener procedimientos almacenados utilizando una columna específica de la tabla, puede utilizar la siguiente consulta:

SELECT DISTINCT Name FROM sys.procedures WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE ''%tbl_name%'' AND OBJECT_DEFINITION(OBJECT_ID) LIKE ''%CreatedDate%'';


Tuve el mismo problema y encontré que Microsoft tiene un systable que muestra dependencies .

SELECT referenced_id , referenced_entity_name AS table_name , referenced_minor_name as column_name , is_all_columns_found FROM sys.dm_sql_referenced_entities (''dbo.Proc1'', ''OBJECT'');

Y esto funciona tanto con Views como con Triggers .


Una opción es crear un archivo de script.

Haga clic derecho en la base de datos -> Tareas -> Generar secuencias de comandos

Luego puede seleccionar todos los procedimientos almacenados y generar el script con todos los sps. Entonces puedes encontrar la referencia desde allí.

O

-- Search in All Objects SELECT OBJECT_NAME(OBJECT_ID), definition FROM sys.sql_modules WHERE definition LIKE ''%'' + ''CreatedDate'' + ''%'' GO -- Search in Stored Procedure Only SELECT DISTINCT OBJECT_NAME(OBJECT_ID), object_definition(OBJECT_ID) FROM sys.Procedures WHERE object_definition(OBJECT_ID) LIKE ''%'' + ''CreatedDate'' + ''%'' GO

SERVER SQL de origen : columna de búsqueda utilizada en el procedimiento almacenado - Buscar procedimiento almacenado para el nombre de columna


prueba esto..

SELECT Name FROM sys.procedures WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE ''%CreatedDate%'' GO

o puede generar scripts de todos los procedimientos y buscar desde allí.


SELECT * FROM sys.all_sql_modules WHERE definition LIKE ''%CreatedDate%''