如何批量更新视图?

Sha*_*ica 0 sql t-sql sql-server-2008

我的数据库有大约30个视图,其中大多数都引用了该服务器上的另一个数据库(称之为DB1).

现在,在不考虑原因的情况下,我需要将所有这些视图更新到DB2本地服务器上.

我不想在每个视图上手动执行此操作.是否有一些我可以运行的SQL查询将在我的所有视图中用'DB2'替换所有出现的字符串'DB1'?

SQL*_*ace 5

导航到视图文件夹,现在按 F7(对象资源管理器详细信息)从右侧窗格中选择您想要的所有视图,右键单击--> 脚本视图为--> DROP and CREATE TO--> 新查询窗口。在那里将 DB1 更改为 DB2,瞧

看图片 替代文字


gbn*_*gbn 5

你可以像这样查询sys.sql_modules,我用它来通过bcp生成一个文件(SSMS将截断结果),它可以作为另一个SQL脚本运行.这也保留了权限.

我之前使用过这种技术并且它有效.

SELECT
    REPLACE (REPLACE (sm.definition, 'CREATE VIEW', 'ALTER VIEW'), 'DB1.', 'DB2.') + '
    GO'
FROM
    sys.sql_modules sm
    JOIN
    sys.objects o ON sm.object_id = o.object_id
WHERE
    sm.definition LIKE '%DB1.%' AND o.type = 'V'
Run Code Online (Sandbox Code Playgroud)