ver tabla resueltos procedimientos procedimiento parametros para mostrar entrada ejercicios ejecutar devolver datos con codigo buscar almacenados almacenado sql sql-server stored-procedures

tabla - Buscar texto en el procedimiento almacenado en SQL Server



procedimiento almacenado sql server select (22)

¿Has intentado usar algunas de las herramientas de terceros para realizar la búsqueda? Hay varios disponibles por ahí que son gratuitos y que me ahorraron un montón de tiempo en el pasado.

A continuación hay dos complementos SSMS que utilicé con éxito.

Búsqueda de ApexSQL: busca el esquema y los datos en las bases de datos y tiene características adicionales como el seguimiento de dependencias y más ...

Paquete de herramientas SSMS : tiene la misma funcionalidad de búsqueda que la anterior y varias otras funciones geniales. No es gratis para SQL Server 2012 pero sigue siendo muy asequible.

Sé que esta respuesta no está relacionada al 100% con las preguntas (que fue más específica), pero espero que a otros les resulte útil.

Quiero buscar un texto de todos los procedimientos almacenados de mi base de datos. Yo uso el siguiente SQL:

SELECT DISTINCT o.name AS Object_Name, o.type_desc FROM sys.sql_modules m INNER JOIN sys.objects o ON m.object_id = o.object_id WHERE m.definition Like ''%[ABD]%'';

Quiero buscar [ABD] en todos los procedimientos almacenados, incluidos los corchetes, pero no está dando el resultado adecuado. ¿Cómo puedo cambiar mi consulta para lograr esto?


Buena práctica para trabajar con SQL Server.

Realice el siguiente procedimiento de almacenamiento y configure la tecla de acceso rápido para esa imagen del fondo,

CREATE PROCEDURE [dbo].[Searchinall] (@strFind AS VARCHAR(MAX)) AS BEGIN SET NOCOUNT ON; --TO FIND STRING IN ALL PROCEDURES BEGIN SELECT OBJECT_NAME(OBJECT_ID) SP_Name ,OBJECT_DEFINITION(OBJECT_ID) SP_Definition FROM sys.procedures WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE ''%''+@strFind+''%'' END --TO FIND STRING IN ALL VIEWS BEGIN SELECT OBJECT_NAME(OBJECT_ID) View_Name ,OBJECT_DEFINITION(OBJECT_ID) View_Definition FROM sys.views WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE ''%''+@strFind+''%'' END --TO FIND STRING IN ALL FUNCTION BEGIN SELECT ROUTINE_NAME Function_Name ,ROUTINE_DEFINITION Function_definition FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_DEFINITION LIKE ''%''+@strFind+''%'' AND ROUTINE_TYPE = ''FUNCTION'' ORDER BY ROUTINE_NAME END --TO FIND STRING IN ALL TABLES OF DATABASE. BEGIN SELECT t.name AS Table_Name ,c.name AS COLUMN_NAME FROM sys.tables AS t INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID WHERE c.name LIKE ''%''+@strFind+''%'' ORDER BY Table_Name END END

Ahora - Establecer clave corta como abajo,

Por lo tanto, la próxima vez que quiera encontrar un texto en particular en cualquiera de los cuatro objetos, como Store procedure , Views , Functions y Tables . Solo necesitas escribir esa palabra clave y presionar la tecla corta.

Por ejemplo: quiero buscar ''PaymentTable'', luego escribir ''PaymentTable'' en el editor de consultas y presionar la tecla corta ctrl+4 - le proporcionará el resultado completo.


Creé un procedimiento para buscar procedimientos, tablas, vistas o trabajos. El primer parámetro @search es el criterio de búsqueda, @target es el objetivo de búsqueda, es decir, procedimientos, tablas, etc. Si no se especifica, busque todo. @db es para especificar la base de datos para buscar, si no se especifica, la db actual. Aquí está la consulta en sql dinámico.

ALTER PROCEDURE [dbo].[usp_find_objects] ( @search VARCHAR(128), @target VARCHAR(128) = NULL, @db VARCHAR(20) = NULL ) AS SET NOCOUNT ON; DECLARE @TSQL NVARCHAR(MAX), @USEDB NVARCHAR(30) IF @db <> '''' SET @USEDB = ''USE '' + @db ELSE SET @USEDB = '''' IF @target IS NULL SET @target = '''' SET @TSQL = @USEDB + '' DECLARE @search VARCHAR(128)  DECLARE @target VARCHAR(128) SET @search = ''''%'' + @search + ''%'''' SET @target = '''''' + @target + '''''' IF @target LIKE ''''%Procedure%'''' BEGIN SELECT o.name As ''''Stored Procedures'''' FROM SYSOBJECTS o INNER JOIN SYSCOMMENTS c ON o.id = c.id WHERE c.text LIKE @search AND o.xtype = ''''P'''' GROUP BY o.name ORDER BY o.name END ELSE IF @target LIKE ''''%View%'''' BEGIN SELECT o.name As ''''Views'''' FROM SYSOBJECTS o INNER JOIN SYSCOMMENTS c ON o.id = c.id WHERE c.text LIKE @search AND o.xtype = ''''V'''' GROUP BY o.name ORDER BY o.name END /* Table - search table name only, need to add column name */ ELSE IF @target LIKE ''''%Table%'''' BEGIN SELECT t.name AS ''''TableName'''' FROM sys.columns c JOIN sys.tables t ON c.object_id = t.object_id WHERE c.name LIKE @search ORDER BY TableName END ELSE IF @target LIKE ''''%Job%'''' BEGIN SELECT j.job_id, s.srvname, j.name, js.step_id, js.command, j.enabled FROM [msdb].dbo.sysjobs j JOIN [msdb].dbo.sysjobsteps js ON js.job_id = j.job_id JOIN master.dbo.sysservers s ON s.srvid = j.originating_server_id WHERE js.command LIKE @search END ELSE BEGIN  SELECT o.name As ''''Stored Procedures'''' FROM SYSOBJECTS o INNER JOIN SYSCOMMENTS c ON o.id = c.id WHERE c.text LIKE @search AND o.xtype = ''''P'''' GROUP BY o.name ORDER BY o.name SELECT o.name As ''''Views'''' FROM SYSOBJECTS o INNER JOIN SYSCOMMENTS c ON o.id = c.id WHERE c.text LIKE @search AND o.xtype = ''''V'''' GROUP BY o.name ORDER BY o.name SELECT t.name AS ''''Tables'''' FROM sys.columns c JOIN sys.tables t ON c.object_id = t.object_id WHERE c.name LIKE @search ORDER BY Tables SELECT j.name AS ''''Jobs'''' FROM [msdb].dbo.sysjobs j JOIN [msdb].dbo.sysjobsteps js ON js.job_id = j.job_id JOIN master.dbo.sysservers s ON s.srvid = j.originating_server_id WHERE js.command LIKE @search END '' EXECUTE sp_executesql @TSQL


De vez en cuando utilizo este script para averiguar qué procesos se deben modificar, o para averiguar qué utiliza una columna de una tabla, o esa tabla para eliminar un poco de correo no deseado. Comprueba cada base de datos en la instancia en la que se ejecuta mediante sp_msforeachdb maravillosamente proporcionado.

if object_id(''tempdb..##nothing'') is not null drop table ##nothing CREATE TABLE ##nothing ( DatabaseName varchar(30), SchemaName varchar(30), ObjectName varchar(100), ObjectType varchar(50) ) EXEC master.sys.sp_msforeachdb ''USE ? insert into ##nothing SELECT db_name() AS [Database], [Scehma]=schema_name(o.schema_id), o.Name, o.type FROM sys.sql_modules m INNER JOIN sys.objects o ON o.object_id = m.object_id WHERE m.definition like ''''%SOME_TEXT%'''''' --edit this text SELECT * FROM ##nothing n order by OBJECTname


Escapar de los corchetes:

... WHERE m.definition Like ''%/[ABD/]%'' ESCAPE ''/'

Luego, los corchetes se tratarán como literales de cadena, no como comodines.


Esta consulta es el texto de búsqueda en el procedimiento almacenado de todas las bases de datos.

DECLARE @T_Find_Text VARCHAR(1000) = ''Foo'' IF OBJECT_ID(''tempdb..#T_DBNAME'') IS NOT NULL DROP TABLE #T_DBNAME IF OBJECT_ID(''tempdb..#T_PROCEDURE'') IS NOT NULL DROP TABLE #T_PROCEDURE CREATE TABLE #T_DBNAME ( IDX int IDENTITY(1,1) PRIMARY KEY , DBName VARCHAR(255) ) CREATE TABLE #T_PROCEDURE ( IDX int IDENTITY(1,1) PRIMARY KEY , DBName VARCHAR(255) , Procedure_Name VARCHAR(MAX) , Procedure_Description VARCHAR(MAX) ) INSERT INTO #T_DBNAME (DBName) SELECT name FROM master.dbo.sysdatabases DECLARE @T_C_IDX INT = 0 DECLARE @T_C_DBName VARCHAR(255) DECLARE @T_SQL NVARCHAR(MAX) DECLARE @T_SQL_PARAM NVARCHAR(MAX) SET @T_SQL_PARAM = '' @T_C_DBName VARCHAR(255) , @T_Find_Text VARCHAR(255) '' WHILE EXISTS(SELECT TOP 1 IDX FROM #T_DBNAME WHERE IDX > @T_C_IDX ORDER BY IDX ASC) BEGIN SELECT TOP 1 @T_C_DBName = DBName FROM #T_DBNAME WHERE IDX > @T_C_IDX ORDER BY IDX ASC SET @T_SQL = '''' SET @T_SQL = @T_SQL + ''INSERT INTO #T_PROCEDURE(DBName, Procedure_Name, Procedure_Description)'' SET @T_SQL = @T_SQL + ''SELECT SPECIFIC_CATALOG, ROUTINE_NAME, ROUTINE_DEFINITION '' SET @T_SQL = @T_SQL + ''FROM '' + @T_C_DBName + ''.INFORMATION_SCHEMA.ROUTINES '' SET @T_SQL = @T_SQL + ''WHERE ROUTINE_DEFINITION LIKE ''''%''''+ @T_Find_Text + ''''%'''' '' SET @T_SQL = @T_SQL + ''AND ROUTINE_TYPE = ''''PROCEDURE'''' '' BEGIN TRY EXEC SP_EXECUTESQL @T_SQL, @T_SQL_PARAM, @T_C_DBName, @T_Find_Text END TRY BEGIN CATCH SELECT @T_C_DBName + '' ERROR'' END CATCH SET @T_C_IDX = @T_C_IDX + 1 END SELECT IDX, DBName, Procedure_Name FROM #T_PROCEDURE ORDER BY DBName ASC


Intente esta solicitud:

Consulta

SELECT name FROM sys.procedures WHERE Object_definition(object_id) LIKE ''%strHell%''


Normalmente ejecuto lo siguiente para lograr eso:

select distinct object_name(id) from syscomments where text like ''%[ABD]%'' order by object_name(id)


También puedes usar

CREATE PROCEDURE [Search]( @Filter nvarchar(max) ) AS BEGIN SELECT name FROM procedures WHERE definition LIKE ''%''+@Filter+''%'' END

y luego correr

exec [Search] ''text''


También puedes usar este:

SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_DEFINITION like ''%Search_String%''


También puedes usar:

SELECT OBJECT_NAME(id) FROM syscomments WHERE [text] LIKE ''%flags.%'' AND OBJECTPROPERTY(id, ''IsProcedure'') = 1 GROUP BY OBJECT_NAME(id)

Eso incluye comentarios


Te puede ayudar!

SELECT DISTINCT A.NAME AS OBJECT_NAME, A.TYPE_DESC FROM SYS.SQL_MODULES M INNER JOIN SYS.OBJECTS A ON M.OBJECT_ID = A.OBJECT_ID WHERE M.DEFINITION LIKE ''%[''+@SEARCH_TEXT+'']%'' ORDER BY TYPE_DESC


Utilizando CHARINDEX :

SELECT DISTINCT o.name AS Object_Name,o.type_desc FROM sys.sql_modules m INNER JOIN sys.objects o ON m.object_id=o.object_id WHERE CHARINDEX(''[ABD]'',m.definition) >0 ;

Utilizando PATINDEX :

SELECT DISTINCT o.name AS Object_Name,o.type_desc FROM sys.sql_modules m INNER JOIN sys.objects o ON m.object_id=o.object_id WHERE PATINDEX(''[[]ABD]'',m.definition) >0 ;

Usar este doble [[]ABD] es similar a escapar:

WHERE m.definition LIKE ''%[[]ABD]%''


prueba también esto

SELECT ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_DEFINITION like ''%/[ABD/]%''



Por favor, tome esto como una alternativa "sucia", pero esto me salvó muchas veces, especialmente cuando no estaba familiarizado con el proyecto DB. A veces, está intentando buscar una cadena dentro de todos los SP y olvida que parte de la lógica relacionada puede haberse escondido entre las Funciones y los Disparadores, o simplemente puede redactarse de forma diferente de lo que pensaba.

Desde su MSSMS, puede hacer clic derecho en su base de datos y seleccionar Tasks -> Generate Scripts Asistente para Tasks -> Generate Scripts para generar todos los SP, Fns y activadores en un solo archivo .sql.

Asegúrate de seleccionar Triggers también!

Luego solo usa Sublime o Notepad para buscar la cadena que necesitas encontrar. Sé que este enfoque puede ser bastante ineficiente y paranoico, pero funciona :)


SELECT DISTINCT OBJECT_NAME([id])--,syscomments.* this gives name of --stored procedures that text found FROM syscomments WHERE [id] IN (SELECT [id] FROM sysobjects WHERE xtype IN (''TF'',''FN'',''V'',''P'') AND status >= 0) AND ([text] LIKE ''%text to be search%'' )

OBJECT_NAME ([id]) -> Nombre de objeto (Ver, Procedimiento de almacenamiento, Función escalar, Nombre de función de tabla)

id (int) = número de identificación del objeto

xtype char (2) Tipo de objeto. Puede ser uno de los siguientes tipos de objeto:

FN = función escalar

P = procedimiento almacenado

V = Ver

TF = función de tabla


-- Applicable for SQL 2005+ USE YOUR_DATABASE_NAME //; GO SELECT [Scehma] = schema_name(o.schema_id) ,o.NAME ,o.type FROM sys.sql_modules m INNER JOIN sys.objects o ON o.object_id = m.object_id WHERE m.DEFINITION LIKE ''%YOUR SEARCH KEYWORDS%'' GO


/* SEARCH SPROCS & VIEWS The following query will allow search within the definitions of stored procedures and views. It spits out the results as XML, with the full definitions, so you can browse them without having to script them individually. */ /* STEP 1: POPULATE SEARCH KEYS. (Set to NULL to ignore) */ DECLARE @def_key varchar(128) = ''%foo%'', /* <<< definition search key */ @name_key varchar(128) = ''%bar%'', /* <<< name search key */ @schema_key varchar(128) = ''dbo''; /* <<< schema search key */ ;WITH SearchResults AS ( /* STEP 2: DEFINE SEARCH QUERY AS CTE (Common Table Expression) */ SELECT [Object].object_id AS [object_id], [Schema].name AS [schema_name], [Object].name AS [object_name], [Object].type AS [object_type], [Object].type_desc AS [object_type_desc], [Details].definition AS [module_definition] FROM /* sys.sql_modules = where the body of sprocs and views live */ sys.sql_modules AS [Details] WITH (NOLOCK) JOIN /* sys.objects = where the metadata for every object in the database lives */ sys.objects AS [Object] WITH (NOLOCK) ON [Details].object_id = [Object].object_id JOIN /* sys.schemas = where the schemas in the datatabase live */ sys.schemas AS [Schema] WITH (NOLOCK) ON [Object].schema_id = [Schema].schema_id WHERE (@def_key IS NULL OR [Details].definition LIKE @def_key) /* <<< searches definition */ AND (@name_key IS NULL OR [Object].name LIKE @name_key) /* <<< searches name */ AND (@schema_key IS NULL OR [Schema].name LIKE @schema_key) /* <<< searches schema */ ) /* STEP 3: SELECT FROM CTE INTO XML */ /* This outer select wraps the inner queries in to the <sql_object> root element */ SELECT ( /* This inner query maps stored procedure rows to <procedure> elements */ SELECT TOP 100 PERCENT [object_id] AS [@object_id], [schema_name] + ''.'' + [object_name] AS [@full_name], [module_definition] AS [module_definition] FROM SearchResults WHERE object_type = ''P'' ORDER BY [schema_name], [object_name] FOR XML PATH (''procedure''), TYPE ) AS [procedures], /* <<< as part of the outer query, this alias causes the <procedure> elements to be wrapped within the <procedures> element */ ( /* This inner query maps view rows to <view> elements */ SELECT TOP 100 PERCENT [object_id] AS [@object_id], [schema_name] + ''.'' + [object_name] AS [@full_name], [module_definition] AS [module_definition] FROM SearchResults WHERE object_type = ''V'' ORDER BY [schema_name], [object_name] FOR XML PATH (''view''), TYPE ) AS [views] /* <<< as part of the outer query, this alias causes the <view> elements to be wrapped within the <views> element */ FOR XML PATH (''sql_objects'')


SELECT DISTINCT o.name AS Object_Name, o.type_desc FROM sys.sql_modules m INNER JOIN sys.objects o ON m.object_id = o.object_id WHERE m.definition Like ''%[String]%'';


Select distinct OBJECT_NAME(id) from syscomments where text like ''%string%'' AND OBJECTPROPERTY(id, ''IsProcedure'') = 1


select top 10 * from sys.procedures where object_definition(object_id) like ''%/[ABD/]%''