我有两个数据库服务器(让我们称之为“外部”和“内部”),我想从“外部”服务器检索视图并将它们存储在“内部”服务器上。 “内部”服务器是一个MS SQL-Server,我不太了解另一个,但我认为它也是MS SQL。现在有关于“外部”服务器的视图,我需要每天映射到我的数据库结构。所以我想每天抓一次视图,然后和他们一起工作。
我已阅读this post但我不能说我如何以编程方式复制视图。 MS SQL Server中是否有一个选项可以从其他服务器或类似的东西中复制视图?
答案 0 :(得分:3)
您可以使用以下quires来获取所有视图的定义 -
1)第一次创建视图 -
select t1.definition , N'
Go
'
from sys.sql_modules t1
join INFORMATION_SCHEMA.TABLES t2
on object_name(t1.object_id) = t2.TABLE_NAME and TABLE_TYPE = 'VIEW'
2)查询每天改变视图 -
select replace( t1.definition , 'create view ','alter view ') , N'
Go
'
from sys.sql_modules t1
join INFORMATION_SCHEMA.TABLES t2
on object_name(t1.object_id) = t2.TABLE_NAME and TABLE_TYPE = 'VIEW
在源服务器上运行上面的查询将输出转换为文本并在目标服务器上执行。确保您的结果是文本和"每列中的最大字符显示" SSMS的设置为8000(在SSMS顶部菜单中转到查询 - >查询选项 - >结果 - >文本)。
答案 1 :(得分:0)
只需添加到Rahul的回复中即可:
select replace( t1.definition , 'create view ','create or alter view ') , N'
Go
'
from sys.sql_modules t1
join INFORMATION_SCHEMA.TABLES t2
on object_name(t1.object_id) = t2.TABLE_NAME and TABLE_TYPE = 'VIEW'
只需执行一条语句,无论是第一次还是随后的运行。