Sql 存储过程及其使用的表
有没有办法通过执行SQL查询来知道一个存储过程使用的表是什么 最好的问候,谢谢你的帮助Sql 存储过程及其使用的表,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,有没有办法通过执行SQL查询来知道一个存储过程使用的表是什么 最好的问候,谢谢你的帮助 注意:我正在使用SQL Server 2005。试试看,不过您可能应该重新编译存储过程以更新数据库中的统计信息 查找sp_dependens系统存储过程。我认为,只要存储过程和表都在同一个数据库中,就可以在SSMS中右键单击该过程,然后单击“查看依赖项”。我不知道对话框后面的问题…这篇关于TechRepublic的文章 描述了一种执行此操作的方法: 本教程将展示如何 编写一个将查找的过程 依赖的所有对象 在其
注意:我正在使用SQL Server 2005。试试看,不过您可能应该重新编译存储过程以更新数据库中的统计信息 查找sp_dependens系统存储过程。我认为,只要存储过程和表都在同一个数据库中,就可以在SSMS中右键单击该过程,然后单击“查看依赖项”。我不知道对话框后面的问题…这篇关于TechRepublic的文章 描述了一种执行此操作的方法: 本教程将展示如何 编写一个将查找的过程 依赖的所有对象 在其他物体上 以下是创建用于查找对象依赖项的系统存储过程的代码:
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存储过程;然而,根据我的经验,这又回到了SQLServer2000上,这些删除并不总是可靠的。在某些情况下,它们没有被更新。假设您的架构未加密,则始终可以转到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
此查询查找三种常见情况,您可能需要添加一些,但基本上我们可以找到表名后面有空格的地方,这有助于限制表名是另一个表名的一部分、结尾有一个返回或在括号内转义的情况