【问题标题】:SQL Management Studio 'View Dependencies' Not Listing All DependenciesSQL Management Studio“查看依赖项”未列出所有依赖项
【发布时间】:2012-04-02 00:43:17
【问题描述】:

过去我认为在 SSMS 中右键单击表并单击“查看依赖项”时,它会列出所有表和使用该表的存储过程。但最近我注意到它缺少一些依赖项。

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

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

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

谢谢。

【问题讨论】:

标签: sql tsql ssms


【解决方案1】:

这是 SQL 服务器的“已知”问题。实际上,这个 SSMS 功能使用起来很危险,尤其是当您想找出必须更改哪些对象时,如果您对表或视图进行了一些更改。

另外 - 不要使用脚本在 syscmets 中搜索,如果对象文本超过 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]

【讨论】:

  • 我担心它会变成那样...但感谢您确认我的疑问。
  • 我已经创建了基于 OBJECT_DEFINITION() 函数的 SQL 脚本,该函数可用于直接从 SSMS 搜索依赖项,而无需将对象编写为文本文件。脚本位于:ssmsboost.com/social/…
  • 看起来不错。为什么不更新答案以包含脚本?对于其他访问者来说,这将是一个很好的参考。 :)
【解决方案2】:

我刚刚注意到 Management Studio 存在同样的问题。

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

【讨论】:

  • 我必须从 SQL Server 对象资源管理器中的数据库创建一个项目,然后单击所需的对象,然后在 T-SQL 视图中选择我想要查找引用的列或表,右键单击它并单击查找所有引用,它在查找所有引用方面做得很好。谢谢
猜你喜欢
  • 1970-01-01
  • 2023-03-03
  • 2014-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
相关资源
最近更新 更多