gpt4 book ai didi

sql-server-2005 - 如何在存储过程中查找数据表列引用

转载 作者:行者123 更新时间:2023-12-01 00:06:41 26 4
gpt4 key购买 nike

我更改了 SQL Server 2005 数据库表中的列名。我还有一个相当大的存储过程集合,它们可能会或可能不会引用该列。有没有办法找到哪些存储过程正在引用该列,而无需实际遍历每个存储过程并手动搜索它?有没有办法自动查找现在将中断的存储过程或其他什么?我无法使用像 RedGate 的 SQL Refactor 这样的 SQL 重构工具。

谢谢!

最佳答案

标准答案是“sp_depends”,但在 SQL 7.0 和 2000 中不能保证它是准确的(即最新的)。我不知道他们是否在 SQL 2005 或 2008 中解决了这个问题,因为我很久以前就推出了自己的解决方法。这并不能满足您的要求,但它可以让您更快地到达那里

它基于此查询:

DECLARE @SearchText varchar(100)

SET @SearchText = 'ProductId'

SELECT
schema_name(ob.schema_id) SchemaName
,ob.name
,ob.type_desc
,len(mo.definition) CodeLength
,mo.definition
from sys.sql_modules mo
inner join .sys.objects ob
on ob.object_id = mo.object_id
where mo.definition like '%' + @SearchText + '%'
order by
case schema_name(ob.schema_id)
when 'dbo' then 'A'
else 'B' + str(ob.schema_id, 10)
end
,ob.type_desc
,ob.name

这将搜索存储在 sys.objects 中的所有文本类型数据库对象,这些对象在 sys.modules 中有数据/定义。这涵盖了存储过程、函数和 View ,还可能涵盖了触发器和一些约束(我不知道哪种方式)。它不跟踪同义词,它们的定义存储在它们自己的系统表中。

结果将返回包含指定字符串的所有此类对象的列表。它绝不会尝试评估字符串出现的上下文——如果它是一个表、列、变量或注释,它就是一个命中并被包含在内。这意味着您的里程将根据您搜索的字符串的独特程度而有所不同……但另一方面,您可以查找的不仅仅是具有此功能的列。

返回的列是:
  • 架构名称
  • 名称(包含
    字符串)
  • type_desc(来自 sys.objects)
  • CodeLength(块 o' 有多大
    找到字符串的代码)
  • 定义(所述块的副本
    代码。嗯,我从不使用这个,也许我
    应该取出来?)
  • 关于sql-server-2005 - 如何在存储过程中查找数据表列引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1111709/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com