我的数据库有大约30个视图,其中大部分都引用了该服务器上的另一个数据库(称之为DB1
)。
现在,在没有说明理由的情况下,我需要将所有这些视图更新到DB2
,同样在本地服务器上。
我不想在每个视图上手动执行此操作。是否有一些我可以运行的SQL查询将在我的所有视图中将所有出现的字符串'DB1'替换为'DB2'?
答案 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并且瞧
见图片