如何知道哪个存储过程具有跨数据库查询

时间:2017-11-23 06:05:36

标签: sql-server database

我想知道哪个存储过程有跨数据库/链接服务器调用。

我知道我可以做一些字符串搜索,数据库名称是要搜索的字符串。 其中一个例子如下

SELECT DISTINCT
       o.name AS Object_Name,
       o.type_desc
  FROM sys.sql_modules m
       INNER JOIN
       sys.objects o
         ON m.object_id = o.object_id
 WHERE m.definition Like '%{{DBNAME}}%';

但如果可能的话我不想去搜索字符串,那么有没有其他方法可以找到可能有跨数据库/链接服务器的所有程序?

1 个答案:

答案 0 :(得分:1)

系统视图sys.sql_expression_dependencies提供了完整的信息:

select d.*
from sys.sql_expression_dependencies d
where d.referenced_database_name is not null
    and d.is_ambiguous = 0;

然而,请注意,某些引用可能是"假的",或者更确切地说不是您所期望的。例如,XML方法也列在其中,这可能会引起一些混淆。