Con*_*nor 5 stored-procedures view sql-server-2012
我有点窘迫。少数几个数据库中有 1,000 多个视图和存储过程,这些数据库被硬编码以追踪另一个数据库。
在我的示例中,SQL Server 中的数据库名称是HOST_1
和LOYALTY_1
。意见和程序正试图在和声明之后HOST_PROD
和LOYALTY_PROD
中。有什么办法,我可以做一个全局查找和各方面的意见和程序,以替换替换用?FROM
JOIN
PROD
1
必须有一种比右键单击每个脚本、在新窗口中创建更改脚本、更改文本并按 F5 更简单的方法。即使我可以创建所有必要的更改并立即运行它们,那也行。
这可以使用 sys.objects 表和 OBJECT_DEFINITION() 函数来完成。
SELECT OBJECT_DEFINITION(id) AS ORIGINAL,
REPLACE(OBJECT_DEFINITION(id),'VALUE_TO_BE_REPLACED', 'VALUE_TO_REPLACE_WITH') AS UPDATED
,*
FROM sys.sysobjects o
WHERE xtype = 'V'
Run Code Online (Sandbox Code Playgroud)
此查询中的“UPDATED”列可用于快速查找和替换视图定义中可能找到的任何数据库或表名称。您需要确保对您正在搜索的文本的每个可能版本都执行相同的操作。例如,名为“db”的数据库可以写为 [db] 或 db。一旦您从查询中获得了所需的内容,只需将其复制并粘贴到查询窗口并执行整个操作即可。请确保在运行之前备份数据库。还要仔细校对输出文本,以便您可以验证替换是否正确工作,并且没有意外地更改超出您预期的内容。
顺便说一句,WEI_DBA 给出的答案也是完全可以接受的。这只是同一件事的不同方法。在他的示例中,GUI 将帮助将所有对象定义获取到查询窗口。然后您只需使用查找/替换(ctrl+h)来替换数据库名称。在这种情况下,每个人都有自己的情况。
我不知道这两种方法都有优点,除了我的方法可能允许您将查询限制为仅某些对象(在本例中为视图),并根据需要在 where 子句中添加额外的过滤器。生成脚本将允许您仅过滤视图、存储过程等,然后单独选择对象,但附加过滤器将仅限于 UI 可以执行的操作。