我有很多具有基本逻辑的存储过程,例如:
if x == 'something' return 10 else return 40;
这些存储过程不会访问任何数据库表。
如何找出数据库中的存储过程?
请注意,在某些存储过程中,我有其他存储过程可以访问数据库而不是它们本身。
答案 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