获取在数据库中执行读取,更新和删除的所有存储过程

时间:2017-12-12 02:37:13

标签: sql sql-server stored-procedures

我有很多具有基本逻辑的存储过程,例如:

if x == 'something' return 10 else return 40;

这些存储过程不会访问任何数据库表。

如何找出数据库中的存储过程?

请注意,在某些存储过程中,我有其他存储过程可以访问数据库而不是它们本身。

1 个答案:

答案 0 :(得分:1)

您想知道哪些存储过程有数据库的引用数据对象吗?以下脚本对您有帮助

    SELECT m.object_id,o.name,c.*,o.type,o.type_desc FROM sys.all_sql_modules AS m
    INNER JOIN sys.objects AS o ON o.object_id=m.object_id
    OUTER  APPLY(

        SELECT
          coalesce(object_schema_name(Referencing_ID)+'.','')+ --likely schema name
            object_name(Referencing_ID)+ --definite entity name
            coalesce('.'+col_name(referencing_ID,referencing_minor_id),'')
               AS [referencing],
          coalesce(Referenced_server_name+'.','')+ --possible server name if cross-server
               coalesce(referenced_database_name+'.','')+ --possible database name if cross-database
               coalesce(referenced_schema_name+'.','')+ --likely schema name
               coalesce(referenced_entity_name,'') + --very likely entity name
               coalesce('.'+col_name(referenced_ID,referenced_minor_id),'')AS [referenced]
        FROM sys.sql_expression_dependencies
        WHERE referencing_id =m.object_id

    ) AS c
    WHERE o.type='P'
    AND c.referencing IS NULL