Topics

Sunday, January 9, 2011

String searching

Sometimes you need to search all procedures, or views for object names.... maybe you're going to rename something, or maybe you have to alter a parameter size/type, and you need to determine everywhere it may be.  This is a handy little tool I put together ages ago to do just that.  It resides in my dba working database, which resides on all of my servers, and I have coded it to 'USE @dbname', so you can hit any database on each instance.  Check it out, let me know what you think.

/****** Object:  StoredProcedure [dbo].[usp_StringSearch]   ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


CREATE PROC [dbo].[usp_StringSearch] (
 @dbname VARCHAR(25),
 @string VARCHAR(35),
 @debug BIT = 0
)
AS
SET NOCOUNT ON;
/* Allows me to traverse system objects for any reference to the given @string.  
Helpful if/when renaming or decommissioning objects.
EXEC dbo.usp_StringSearch @dbname='testdatabase',@string='%TBL_%'
*/


DECLARE @sql1 NVARCHAR(2000)
SET @sql1 = 'USE '+@dbname+'
SELECT DISTINCT OBJECT_NAME(ID) AS CallingObject
FROM sys.syscomments
WHERE [Text] LIKE '''+@string+'''
ORDER BY OBJECT_NAME(ID) ' 


IF(@debug = 1)
BEGIN
   PRINT(@sql1)
END
ELSE
BEGIN
   EXEC (@sql1)
END


SET NOCOUNT OFF;
GO


NOTE:  Use @debug if you want to be sure of the string you're passing, like this:
EXEC dbo.usp_StringSearch @dbname='testdatabase',@string='%TBL_%',@debug = 1


Output:

   USE testdatabase
   SELECT DISTINCT OBJECT_NAME(ID) AS CallingObject
   FROM sys.syscomments
   WHERE [Text] LIKE '%TBL_%'
   ORDER BY OBJECT_NAME(ID) 

No comments:

Post a Comment