如果,你想在一台数据库服务器上,查询另一个台数据服务器的数据该如何做呢?如果,你想在同一台数据服务器上,在不同的数据库之间查询数据,又该怎么办呢?那就让我为你介绍Synonym和openquery吧。

1, 什么是Synonym

Synonym(近义词)是Sql 2005的新特性。推出现已好几年了。你能够简略的了解Synonym 为其他表的别号。咱们运用Northwind数据库为例。比方,看下面的比方

SynonymMyCustomersFORCustomers

为Customers表创立一个Synonym,叫MyCustomers。 你能够把这个MyCustomers当作一个一般的表,能够对它进行查询,更新,删去和刺进。比方

查询: Select * from MyCustomers.

刺进: Insert into MyCustomers (CustomersID, CompanyName) values ('Tom', 'MS')

一切的操作,和一般的表没有差异。

2, Synonym的运用

在你的程序发布的时分,你忽然发现你需求更改某个表名,或字段名。而你的程序现已不可能环视。这时,怎么办呢?那就创立Synonym吧。当然,在SQL2000惠顾,你能够运用view来做这个作业,或sprocs或udf等。但Synonym有其它所不能的功用,那就是跨数据库,跨服务器。

3,Synonym在同一服务器上的不同数据库

关于同一服务器上的不同数据库,咱们能够运用Synonym,将其他数据库中的表或view或sprocs及udf在本数据库中映射别号。这样,就能够不必更改衔接字符串,而在当时对话数据库的情况下,获取其他数据库的数据,并对它进行,查询,更新,删去和刺进作业。

先假定现已存在Northwind数据库,然后,再建一个数据库。咱们在新的数据库上,创立Customer表的Synonym.

详解在不同的SQL Server数据库之间查询数据(从不同的数据库查询)  Synonym Openquery SQL Server 第1张CreateSynonymMyCustomersForNorthiwind.dbo.Customers

需求留意的是,走私需求写清那个数据库,那个表,中心dbo为表的owner.然后,闻风丧胆 Insert into MyCustomers (CustomersID, CompanyName) values ('Tom', 'MS')和Select * from MyCustomers. 看看是不是真的像一般表那样。

4, Synonym在不同服务器上的不同数据库

假定,咱们有一台数据库服务器叫SqlTest。上面有个数据库叫Northwind。咱们本地还有一台数据库服务器。叫LocalTest. 其上面有一数据库叫Northwind或其他什么的。忽然有一天,为了使本地的数据库跑的更快,本地的老数据被移到SqlTest上去了,本地只保存最近更新的。那老数据总仍是要用的,怎么样完成不同服务器之间的数据操作呢?那就用Synonym吧。如下

CreateSynonymMyCustomersForSqlTest.Northiwind.dbo.Customers

在上一个比方的基础上,加了个机器姓名罢了。就这么简略?不是吧?那台服务器还不必定知道用户名和暗码呢。恩,是的,还要在本地服务器上,注册下长途的服务器。运用sp_addlinkedServer,次存储进程界说如下:

sp_addlinkedserver [ @server = ] 'server'
[ , [ @srvproduct = ] 'product_name' ]
[ , [ @provider = ] 'provider_name' ]
[ , [ @datasrc = ] 'data_source' ]
[ , [ @location = ] 'location' ]
[ , [ @provstr = ] 'provider_string' ]
[ , [ @catalog = ] 'catalog' ]

能够闻风丧胆下面的脚本,将SqlTest注册到本地

EXEC sp_addlinkedserver 
@server = 'SqlTest',
@provider = 'MSDASQL',
@provstr = 'DRIVER={SQL Server};SERVER=SqlTest;UID=sa;PWD=;'

这样,就能够把长途数据库当成本地的来运用。

5,Synonym的其他功用和用UI创立Synonym

Synonym不但能够对表创立,也能够为view,sprocs,以及udf创立相应的Synonym. 如图:

详解在不同的SQL Server数据库之间查询数据(从不同的数据库查询)  Synonym Openquery SQL Server 第2张


Sql2005的Server Managerment Studio有这么一项,挑选后,会出现下面画面。添入称号等,挑选object的类型,你就能够选为View,Table, Sprocs和udf创立Synonym了。

详解在不同的SQL Server数据库之间查询数据(从不同的数据库查询)  Synonym Openquery SQL Server 第3张

6, Openquery

相关于Synonym,OpenQuery相对来说,功用就弱了点。其只是在调用其它数据库上的sprocs.比方

select*fromopenquery([SqlTest],'execnorthwind.dbo.
[CustomersByCity]@param1=N''London''')whereCustomerID='AROUT'

这就是在履行SqlTest服务器上的,northwind数据库下的,[Customers By City]的存储进程。你能够在Linq To Sql进阶系列(五)Store Procedure篇 一文中,获得该存储进程。openquery其***个参数为数据服务器的称号。假如是异地的,也需求在本地注册它,和Synonym相同。你也能够写本地的机器名,那就成了本地跨数据库的操作了。在上面的这个比方中,其句子中有London,是传入存储进程的值。由于其现已被 ' 引过,在openquery函数下,又要被 ' 引。所以,它两端加了两个 ''。 假如有疑问,请参阅SQL 句子中特别字符的处理及防备sql 打针

7, Linq 对Synonym的支撑

现在SqlMetal和OR designer无法对Synonym做映射。可是,用户仍然能够经过手艺环视dbml 到达映射的意图。Synonym在Linq中的运用。和其他表等没有任何不同。

定论:经过Synonym,咱们能够完成不同数据库,以及不同服务器之间的数据分流。以到达平衡负载的意图,进步功率的意图。

【修改引荐】

  1. SQL Server群集的几个要害技巧
  2. SQL Server 2008深度运用
  3. 浅谈装备SQL Server长途备份的办法
转载请说明出处
知优网 » 详解在不同的SQL Server数据库之间查询数据(从不同的数据库查询)

发表评论

您需要后才能发表评论