通过所有存储过程使用搜索/替换的最快/最简单的方法

Con*_*eak 13 sql sql-server sql-server-2008

实际上,这是一个2部分的问题.

  1. 是否可以使用某种功能来搜索字符串的每个存储过程并可能替换它,就像标准的查找/替换功能一样?

  2. 如果您的所有存储过程代码都包含这样的完整数据库路径[db1].[dbo].[table1]并且您将数据库名称更改[db2]为SQL Server是否有办法自动将[db1]表中的所有代码更新为[db2]?还是必须手动完成?

Dav*_*son 38

从SSMS中的"对象资源管理器详细信息"窗口中,打开存储过程文件夹.选择所有对象(您可以从此窗口中进行多选,这几乎是"对象资源管理器详细信息"窗口的唯一目的)并右键单击,选择脚本为DROP和CREATE.您现在可以对此进行搜索/替换,在执行之前一次性替换您需要的所有内容.

编辑:我在博客上写过这个解决方案.

  • 正是我需要的。我也认为这是对 OP 问题 1 的最佳答案。 (2认同)
  • 这绝对应该是选择的答案.非常有帮助,谢谢. (2认同)

Jam*_*tin 22

迟到但希望有用.

ApexSQL提供了一个免费的搜索工具,可以在数据库中查找和重命名对象.

他们说它有一个智能重命名选项,可以查找/替换所有出现的某些对象,如表,函数或存储过程.

我必须补充一点,我没有使用重命名功能,但我可以确认搜索工作得很好.

此外,我不隶属于ApexSQL,但我确实使用他们的工具.


mar*_*c_s 11

要搜索:如果您需要按名称查找数据库对象(例如表,列,触发器) - 请查看名为SQL Search免费 Red-Gate工具,它会执行此操作 - 它会在整个数据库中搜索任何类型的字符串(s ).

在此输入图像描述

在此输入图像描述

对于任何DBA或数据库开发人员来说,它都是必备工具 - 我是否已经提到它可以完全免费用于任何类型的使用?

但是,此工具不支持替换文本 - 但即使只是能够找到所有相关的存储过程(或其他DB对象)也非常有用!

  • 您不需要工具来查找.有些查询可以做到这一点.`select*from sys.sql_modules M Inner Join sys.objects O on M.object_id = O.object_id其中M.definition如'%text%' (4认同)
  • 这不应该是公认的答案,因为它只回答了问题的一半,即如何搜索。它甚至不提供任何有关更换的信息!我认为大卫·阿特金森下面的答案更好,因为它实际上提供了进行替换的选项。 (2认同)

eri*_*xiv 5

  1. 将所有SP导出到文件.使用您喜欢的文本编辑工具进行搜索/替换.通过执行脚本更新数据库(只要不重命名过程).

  2. 如果明确定义完整数据库路径,则需要手动(参见上文)更新存储过程.如果您不包含数据库名称,或使用链接服务器或类似名称,则无需进行任何更改.