Sql server 以编程方式将数据库视图从一个数据库服务器复制到另一个数据库服务器

Sql server 以编程方式将数据库视图从一个数据库服务器复制到另一个数据库服务器,sql-server,database,Sql Server,Database,我有两个数据库服务器(让我们称它们为“外部”和“内部”),我想从“外部”服务器检索视图,并将它们存储在“内部”服务器上。“内部”服务器是一个MS SQL server,我对另一个不太了解,但我认为它也是MS SQL。现在,我需要每天将“外部”服务器上的视图映射到我的数据库结构中。因此,我想每天捕捉一次视图,然后与它们一起工作 我已经读过了,但我不能说我如何能以编程方式复制视图。MS SQL Server中是否有从其他服务器或类似服务器复制视图的选项?您可以使用以下要求获取所有视图的定义- 1)

我有两个数据库服务器(让我们称它们为“外部”和“内部”),我想从“外部”服务器检索视图,并将它们存储在“内部”服务器上。“内部”服务器是一个MS SQL server,我对另一个不太了解,但我认为它也是MS SQL。现在,我需要每天将“外部”服务器上的视图映射到我的数据库结构中。因此,我想每天捕捉一次视图,然后与它们一起工作


我已经读过了,但我不能说我如何能以编程方式复制视图。MS SQL Server中是否有从其他服务器或类似服务器复制视图的选项?

您可以使用以下要求获取所有视图的定义-

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顶部菜单中,转到查询->查询选项->结果->文本)

再加上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'

无论第一次运行还是后续运行,只需执行一条语句。

如果另一台服务器是MS SQL server,只需查询其按视图筛选的sys.SQL_模块,但如果是另一台RDBMS,则将没有SQL_模块。请让我理解代码:1)以文本形式获取视图,通过将sys.sql_模块连接到所有现有表上,从中选择所有视图?2) 老实说,我真的不确定这是怎么回事。你能进一步解释一下这一点吗?谢谢你的回答!sql_模块包含所有对象的定义,如-视图、SP、触发器、用户定义函数等。。为了过滤出视图定义,我们将其与信息_SCHEMA.TABLES连接起来。此表包含数据库中用户定义的表和视图的列表。因此,查询“TABLE_TYPE='VIEW'”中的最后一个条件将确保我们只接受视图的定义。