如何批量更新视图?

时间:2010-06-06 10:27:01

标签: sql tsql sql-server-2008

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

现在,在没有说明理由的情况下,我需要将所有这些视图更新到DB2,同样在本地服务器上。

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

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分:4)

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

见图片 alt text