DJa*_*Jay 117 sql t-sql sql-server-2005
我创建了一个关于开发环境的表用于测试目的,并且很少有sp正在重写这个表.现在我必须删除此表以及识别引用此表的所有sp.我很难找到所有sp的列表.请通过假设表名为"x"并且数据库是sql server 2005来建议一些查询.
Cha*_*ins 225
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%TableNameOrWhatever%'
Run Code Online (Sandbox Code Playgroud)
BTW - 这是一个方便的资源,用于此类问题:查询SQL Server系统目录常见问题解答
Guy*_*ton 26
以下适用于SQL2008及更高版本.提供存储过程和函数的列表.
select distinct [Table Name] = o.Name, [Found In] = sp.Name, sp.type_desc
from sys.objects o inner join sys.sql_expression_dependencies sd on o.object_id = sd.referenced_id
inner join sys.objects sp on sd.referencing_id = sp.object_id
and sp.type in ('P', 'FN')
where o.name = 'YourTableName'
order by sp.Name
Run Code Online (Sandbox Code Playgroud)
Han*_*ing 17
非查询方式是使用Sql Server Management Studio.
找到该表,右键单击并选择"查看依赖关系".
编辑
但是,正如评论者所说,这不是很可靠.
小智 15
有时上面的查询不会给出正确的结果,有内置的存储过程可用于获取表依赖关系:
EXEC sp_depends @objname = N'TableName';
Run Code Online (Sandbox Code Playgroud)
以下查询将获取所有存储过程名称以及这些SP的相应定义
select
so.name,
text
from
sysobjects so,
syscomments sc
where
so.id = sc.id
and UPPER(text) like '%<TABLE NAME>%'
Run Code Online (Sandbox Code Playgroud)
SELECT
o.name
FROM
sys.sql_modules sm
INNER JOIN sys.objects o ON
o.object_id = sm.object_id
WHERE
sm.definition LIKE '%<table name>%'
Run Code Online (Sandbox Code Playgroud)
请记住,这也会打开表名在注释中的SP,或者表名是正在使用的另一个表名的子字符串.例如,如果您有名为"test"和"test_2"的表,并且您尝试使用"test"搜索SP,那么您将获得两者的结果.
小智 5
下面的查询仅在搜索表上的依赖项而不是列上的依赖项时才有效:
EXEC sp_depends @objname = N'TableName';
Run Code Online (Sandbox Code Playgroud)
但是,如果要搜索各种依赖项,以下查询是最佳选项,它不会遗漏任何内容.它实际上提供了比所需更多的信息.
select distinct
so.name
--, text
from
sysobjects so,
syscomments sc
where
so.id = sc.id
and lower(text) like '%organizationtypeid%'
order by so.name
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
325125 次 |
| 最近记录: |