2012-04-02 71 views
4

在过去,我想在右键单击SSMS中的表并单击'查看依赖关系'时,它会列出所有使用该表的表和存储特效。但最近我注意到它错过了一些依赖关系。SQL管理工作室'查看依赖关系'不列出所有依赖关系

有时它会遗漏一些使用SELECT语句引用它的存储过程,有时它是INSERT或UPDATE语句。关于什么是依赖的,什么不是,似乎没有共同的模式。任何人都可以看到这一点吗? (不,这不是一个许可问题,我有系统管理员权限)

我最终的目标是找到一种方法来找到所有依赖关系的特定表/视图/存储过程使用最简单的方法(即。没有脚本),但它必须返回所有的依赖关系,而不仅仅是一些。任何帮助?

PS。我正在使用SQL Server 2005和SSMS 2005.

谢谢。

+3

[我知道这是2008年,但它有许多有用的信息](http://sqlblog.com/blogs/aaron_bertrand/archive/2008/09/09/keeping-sysdepends-up-to- date-in-sql-server-2008.aspx) – 2012-04-02 01:53:47

回答

9

这是SQL Server的“已知”问题。实际上,这个SSMS功能使用起来很危险,特别是当你想要找出你必须改变哪些对象时,如果你对Table或View做了一些改变。

而且 - 不使用脚本在syscomments中进行搜索,就好像对象文本是超过8000个符号则会将其分割成几个部分,让你的表的那名可以切割成

RECORD1: ...... table_that_yo

RECORD2:u_search ........

此前我的“食谱”是所有脚本对象转换成文本文件到硬盘,并执行“在文件中搜索”使用任何文本编辑器 - 就像记事本++(查找文件)功能的SSMS一样。

我现在已经创建了一个脚本,允许在对象定义中使用的搜索引擎内置SQL函数:

/* 
This is an easy way to look through the sources of all objects in the database 
if you need to find particular string. This script can be used, for example, 
to find references of some specific object by other objects. Depending on the 
size of your database you might want to limit the search scope to particular 
object type. Just comment unneeded object types in WHERE statement. 
Enter search string between %% marks in @SearchPattern initialisation statement. 
When you get the results you can copy object name from "FullName" column and 
use SSMSBoost to quickly locate it in the object explorer, or you can continue 
searching in results using "Find in ResultsGrid" function. 

This script is provided to you by SSMSBoost add-in team as is. Improvements and 
comments are welcome. 
Redistribution with reference to SSMSBoost project website is welcome. 
SSMSBoost team, 2014 
*/ 

DECLARE @SearchPattern NVARCHAR(128) 

SET @SearchPattern = '%%' 

SELECT SCHEMA_NAME(o.schema_id) as [schema] 
,  o.[name] 
,  o.[type] 
,  '['+SCHEMA_NAME(o.schema_id)+'].['+o.[name]+']' as FullName 
,  OBJECT_DEFINITION(object_id) AS [Source] 
FROM sys.objects AS o 
WHERE lower(OBJECT_DEFINITION(o.object_id)) LIKE lower(@SearchPattern) 
    AND o.[type] IN (
    'C',--- = Check constraint 
    'D',--- = Default (constraint or stand-alone) 
    'P',--- = SQL stored procedure 
    'FN',--- = SQL scalar function 
    'R',--- = Rule 
    'RF',--- = Replication filter procedure 
    'TR',--- = SQL trigger (schema-scoped DML trigger, or DDL trigger at either the database or server scope) 
    'IF',--- = SQL inline table-valued function 
    'TF',--- = SQL table-valued function 
    'V') --- = View 
ORDER BY o.[type] 
,  o.[name] 
+0

我很害怕它会来... ...但谢谢你确认我的疑惑。 – 2012-04-03 23:42:36

+0

我已经创建了基于OBJECT_DEFINITION()函数的SQL脚本,该函数可用于直接从SSMS搜索依赖项,而无需将对象编写为文本文件。脚本位于:http://www.ssmsboost.com/social/yaf_postst123_Search-in-Sources-sis--Autoreplacement.aspx – 2014-05-08 16:51:24

+1

看起来不错。你为什么不更新你的答案来包含脚本?对于这个问题的其他访问者来说,这将是一个很好的参考。 :) – 2014-05-08 22:48:46

1

我刚才注意到了同样的问题,与管理Studio。

但幸运的是发现如果您使用Visual Studio Database projects,并使用“查看架构”窗格,您可以右键点击一个项目并查看依赖关系。显示的依赖关系似乎是准确的。

+0

我不得不从SQL Server对象资源管理器中的数据库中创建一个项目,然后单击所需的对象,然后在T-SQL视图中选择我想要查找引用的列或表,然后单击查找所有参考文献,它找到所有参考文献做得非常好。谢谢 – 2013-12-05 00:04:25