查询以获取SQL Server 2005中存储过程使用的数据库的信息

时间:2015-01-21 10:19:12

标签: sql sql-server database sql-server-2005 stored-procedures

SQL Server 2005中是否有任何查询返回特定数据库中存储过程列表以及数据库名称,其对象在存储中被使用过程

4 个答案:

答案 0 :(得分:0)

在SQL Server 2005中可靠地执行此操作并不是一件简单的事情。您可能希望查看商业产品,例如ApexSQL CleanSQL Dependency Tracker

在SQL Server 2008中,您可以尝试使用sys.sql_expression_dependencies动态管理视图。例如,

select
    quotename(s.name) + N'.' + quotename(o.name) as ProcedureName,
    ed.referenced_server_name,                                                                                                           
    ed.referenced_database_name,                                                                                                         
    ed.referenced_schema_name,                                                                                                           
    ed.referenced_entity_name                                                                                                           
from sys.sql_expression_dependencies  ed
    inner join sys.objects o on o.object_id = ed.referencing_id
    inner join sys.schemas s on s.schema_id = o.schema_id
where
    o.type = 'P'

希望这有帮助,

里斯

答案 1 :(得分:0)

这是获取所有程序名称的方法:

select * 
  from DatabaseName.information_schema.routines 
 where routine_type = 'PROCEDURE'

我现在要检查,是否有办法检查他们的代码是否有表名。

答案 2 :(得分:0)

您可以使用此查询

它将显示所有依赖关系甚至列

SELECT      
--SP, View, or Function
ReferencingName = o.name,
ReferencingType = o.type_desc,

--Referenced Field
ref.referenced_database_name, --will be null if the DB is not explicitly called out
ref.referenced_schema_name, --will be null or blank if the DB is not explicitly called out
ref.referenced_entity_name,
ref.referenced_minor_name

FROM sys.objects AS o 
cross apply sys.dm_sql_referenced_entities('dbo.' + o.name, 'Object') ref
where o.type = 'p'
-- for other database object types use below line 
-- o.type in ('FN','IF','V','P','TF')

答案 3 :(得分:0)

适用于单个数据库

select * 
 from information_schema.routines 
 where routine_type = 'PROCEDURE'