Script Ahoy!
1: 2: 3: /* Find stored procedure by text string */
4: DECLARE
5: @SearchString varchar(4000), -- The text to search for
6: @ProcName varchar(500), -- The name of the proc we're checking.
7: @ErrorMessage varchar(4000) -- Error placeholder.
8: 9: SET @SearchString = (SELECT '')
10: 11: IF (SELECT OBJECT_ID('tempdb.dbo.#Search')) IS NOT NULL
12: DROP TABLE #Search
13: 14: IF (SELECT OBJECT_ID('tempdb.dbo.#Results')) IS NOT NULL
15: DROP TABLE #Results
16: 17: IF (SELECT OBJECT_ID('tempdb.dbo.#ProcList')) IS NOT NULL
18: DROP TABLE #ProcList
19: 20: CREATE TABLE #ProcList ( -- The list of procedures to search.
21: [Name] varchar(500)
22: ) 23: 24: CREATE TABLE #Search ( -- A place to search them.
25: ProcName varchar(500),
26: TextLine varchar(4000)
27: ) 28: 29: CREATE TABLE #Results ( -- The place to put the results.
30: ProcName varchar(500),
31: TextLine varchar(4000)
32: ) 33: 34: SET @ErrorMessage = (SELECT NULL) -- No errors yet...
35: 36: IF (SELECT @SearchString) IS NULL -- You forgot to put in a search string.
37: BEGIN
38: SET @ErrorMessage = (SELECT 'You did not provide anything to search for')
39: GOTO EXITPROC -- Fatal Error.
40: END
41: 42: -- Get the list of procedures to search from dbo.sysobjects.
43: INSERT INTO #ProcList
44: SELECT [Name]
45: FROM dbo.sysobjects
46: WHERE xtype = 'P'
47: 48: WHILE (SELECT COUNT(*) FROM #Proclist) > 0 -- Still have procs to check...
49: BEGIN
50: 51: SET @ProcName = (SELECT TOP 1 [Name] FROM #Proclist)
52: 53: BEGIN TRY
54: 55: INSERT INTO #Search(TextLine)
56: EXEC dbo.sp_helptext @ProcName
57: 58: UPDATE #Search
59: SET ProcName = @ProcName
60: WHERE ProcName IS NULL
61: 62: END TRY
63: 64: BEGIN CATCH
65: 66: SET @ErrorMessage = (SELECT ERROR_MESSAGE() +
67: ' -- Unable to get text for procedure ' + @ProcName) -- It could happen...
68: 69: END CATCH -- Non-fatal. Keep going.
70: 71: DELETE FROM #ProcList
72: WHERE [Name] = @ProcName -- Done with that one.
73: 74: END
75: 76: -- Gather the results into another table, suitable for display.
77: INSERT INTO #Results (ProcName, TextLine)
78: SELECT ProcName, TextLine
79: FROM #Search
80: WHERE TextLine LIKE '%' + @SearchString + '%'
81: 82: IF (SELECT COUNT(*) FROM #Results) = 0 -- No results.
83: BEGIN
84: SET @ErrorMessage = 'Specified search string was not found.'
85: GOTO EXITPROC -- Fatal error.
86: END
87: 88: SELECT * FROM #Results -- Display what we have.
89: 90: EXITPROC:91: IF (SELECT @ErrorMessage) IS NOT NULL
92: BEGIN
93: RAISERROR(@ErrorMessage,16,1)
94: END
0 comments:
Post a Comment