1

Can any one get me the Script that pull the names of all the stored procedures that has functions in the where clause?

For example ISNULL(fieldname,0)

sqluser
  • 5,502
  • 7
  • 36
  • 50
Ramachandra
  • 39
  • 1
  • 5

3 Answers3

1

Really hard to find

My first attempt is to run something like this

SELECT * FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'PROCEDURE' 
AND ROUTINE_DEFINITION LIKE '%WHERE%ISNULL%'

But you need to play with all functions. Better to join this query with a table contacting all built-in functions.

sqluser
  • 5,502
  • 7
  • 36
  • 50
0

If am not wrong we cannot take the list of system functions. refer this Extracting system functions in SQL Server 2008 R2

if the list is of user defined functions, you can try this way

SELECT ROUTINE_NAME
FROM   INFORMATION_SCHEMA.ROUTINES A
       JOIN SYS.OBJECTS B
         ON A.ROUTINE_DEFINITION LIKE '%' + B.NAME + '%'
            AND B.TYPE IN ( 'FN', 'IF', 'TF' )
            AND A.ROUTINE_TYPE = 'PROCEDURE' 
Community
  • 1
  • 1
Recursive
  • 954
  • 7
  • 12
0

Below is one of the way to check function that utilized in stored procedures

DECLARE @nStart INT = 1
DECLARE @nEnd INT = (SELECT COUNT(1) FROM SYS.SYSOBJECTS WHERE XTYPE='TF'OR XTYPE='FN')
DECLARE @Query NVARCHAR(MAX) = ''
DECLARE @sUnion NVARCHAR(30) = ' UNION ALL '
DECLARE @FncName NVARCHAR(100)

WHILE @nStart<=@nEnd
BEGIN

    SET @FncName = (SELECT NAME FROM (SELECT SO.NAME,ROW_NUMBER() OVER (ORDER BY SO.NAME) RN FROM SYS.SYSCOMMENTS SC INNER JOIN SYS.SYSOBJECTS SO
                            ON SO.ID = SC.ID WHERE SO.XTYPE = 'TF' OR SO.XTYPE = 'FN')T1 WHERE RN = @nStart)

    SET @Query =  @Query + ' SELECT ' + '''' + @FncName  + '''' 

    IF(@nStart!=@nEnd)
        BEGIN
            SET @Query  = @Query + @sUnion
        END

    SET @nStart = @nStart + 1
END

DECLARE @TempTable TABLE
(
ID INT IDENTITY(1,1),
TITLE NVARCHAR(MAX)
)

INSERT INTO @TempTable
EXEC SP_EXECUTESQL @Query

DECLARE @nTempTableStart INT = 1
DECLARE @nTempTableEnd INT = (SELECT COUNT(1) FROM @TempTable)
DECLARE @Condition NVARCHAR(MAX) = ' '
DECLARE @FunctionName NVARCHAR(100)

WHILE @nTempTableStart <= @nTempTableEnd
BEGIN

    SET @FunctionName = (SELECT NAME FROM (SELECT TITLE 'NAME',ROW_NUMBER() OVER (ORDER BY TITLE) RN FROM @TempTable)T1 WHERE RN = @nTempTableStart)


    SET @Condition = @Condition + ' LIKE ' + '''' + '%'+@FunctionName+'%' + ''''

    IF @nTempTableStart!=@nTempTableEnd
        SET @Condition = @Condition + ' OR SC.TEXT'

    IF @nTempTableStart = @nTempTableEnd
        SET @Condition = @Condition + ' ) '

    SET @nTempTableStart = @nTempTableStart + 1
END


DECLARE @FinalQuery NVARCHAR(MAX)

SET @FinalQuery = 'SELECT SO.NAME,SC.TEXT FROM
SYS.SYSCOMMENTS SC INNER JOIN SYS.SYSOBJECTS SO ON SC.ID = SO.ID WHERE (SC.TEXT ' + @Condition
+ ' AND (SO.XTYPE !=''TF'' AND SO.XTYPE !=''FN'')'


EXECUTE SP_EXECUTESQL @FinalQuery
Low Chee Mun
  • 610
  • 1
  • 4
  • 9