有没有办法通过执行SQL查询来了解一个存储过程使用的表是什么?
致以最诚挚的问候,并感谢您的帮助。
P.S。:我正在使用SQL Server 2005。
答案 0 :(得分:4)
TechRepublic上的这篇文章
Finding dependencies in SQL Server 2005
描述了一种方法:
本教程将向您展示如何做到 写一个会查找的程序 所有依赖的对象 在其他对象上。
以下是创建用于查找对象依赖项的系统存储过程的代码:
USE master
GO
CREATE PROCEDURE sp_FindDependencies
(
@ObjectName SYSNAME,
@ObjectType VARCHAR(5) = NULL
)
AS
BEGIN
DECLARE @ObjectID AS BIGINT
SELECT TOP(1) @ObjectID = object_id
FROM sys.objects
WHERE name = @ObjectName
AND type = ISNULL(@ObjectType, type)
SET NOCOUNT ON ;
WITH DependentObjectCTE (DependentObjectID, DependentObjectName, ReferencedObjectName, ReferencedObjectID)
AS
(
SELECT DISTINCT
sd.object_id,
OBJECT_NAME(sd.object_id),
ReferencedObject = OBJECT_NAME(sd.referenced_major_id),
ReferencedObjectID = sd.referenced_major_id
FROM
sys.sql_dependencies sd
JOIN sys.objects so ON sd.referenced_major_id = so.object_id
WHERE
sd.referenced_major_id = @ObjectID
UNION ALL
SELECT
sd.object_id,
OBJECT_NAME(sd.object_id),
OBJECT_NAME(referenced_major_id),
object_id
FROM
sys.sql_dependencies sd
JOIN DependentObjectCTE do ON sd.referenced_major_id = do.DependentObjectID
WHERE
sd.referenced_major_id <> sd.object_id
)
SELECT DISTINCT
DependentObjectName
FROM
DependentObjectCTE c
END
此过程使用公用表 递归的表达式(CTE) 走下依赖链来获取 对所有的对象 依赖于传入的对象 程序,流程。数据的主要来源 来自系统视图 sys.sql_dependencies,包含 所有人的依赖信息 数据库中的对象。
答案 1 :(得分:2)
尝试sp_depends,尽管您应该重新编译存储过程以更新数据库中的统计信息。
答案 2 :(得分:1)
查找sp_depends系统存储过程。
答案 3 :(得分:0)
我认为只要存储过程和表都在同一个数据库中,您就可以右键单击SSMS中的过程并单击“查看依赖项”。我不知道对话背后的查询......
答案 4 :(得分:0)
正如其他人所说,您可以使用Dependancies存储过程;但是,根据我的经验,这又回到了SQL Server 2000上,但是这种情况并不总是可靠的。在某些情况下,他们没有得到更新。假设您的架构未加密,您可以随时转到sysComments表。
declare @crlfSearch varchar(max),@objectSearch varchar(max),@escapeSearch varchar(max)
set @crlfSearch=('%bid' + char(13)+'%')
set @objectSearch='%bid %'
set @escapeSearch ='%[[]Bid]%'
select distinct so.name
from syscomments sc
inner join sysobjects so
on sc.id=so.id
where text like @objectSearch or text like @crlfSearch
or text like @escapesearch
此查询查找三种常见情况,您可能需要添加一些但基本上我们找到表名后面有空格的位置,(这有助于限制表名是另一个表名的一部分的情况),有一个在它的末尾返回,或在括号内转义。