Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 存储过程及其使用的表_Sql_Sql Server_Sql Server 2005 - Fatal编程技术网

Sql 存储过程及其使用的表

Sql 存储过程及其使用的表,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,有没有办法通过执行SQL查询来知道一个存储过程使用的表是什么 最好的问候,谢谢你的帮助 注意:我正在使用SQL Server 2005。试试看,不过您可能应该重新编译存储过程以更新数据库中的统计信息 查找sp_dependens系统存储过程。我认为,只要存储过程和表都在同一个数据库中,就可以在SSMS中右键单击该过程,然后单击“查看依赖项”。我不知道对话框后面的问题…这篇关于TechRepublic的文章 描述了一种执行此操作的方法: 本教程将展示如何 编写一个将查找的过程 依赖的所有对象 在其

有没有办法通过执行SQL查询来知道一个存储过程使用的表是什么

最好的问候,谢谢你的帮助


注意:我正在使用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
此查询查找三种常见情况,您可能需要添加一些,但基本上我们可以找到表名后面有空格的地方,这有助于限制表名是另一个表名的一部分、结尾有一个返回或在括号内转义的情况