原文:SQL 2005 中查询或执行另外的数据库操作的方法

摘要:
如果,你想在一台数据库服务器上,查询另一个台数据服务器的数据该如何做呢?如果,你想在同一台数据服务器上,在不同的数据库之间查询数据,又该怎么办呢?

1.Synonym

2.openquery

3.Linked Servers

Server Object-->Linked Servers--> serverType 选择 SQL Server, 在 Security 中 选择"Be made using this security context"
输入用户名和密码 ,使用:
SELECT * FROM [Galaxy].DataWarehouse.dbo.Fact_Job_Statistics WHERE ...

[转]数据库中使用 Synonym和openquery

2007年10月23日 0:45:32 发布:yaosansi
http://www.cnblogs.com/atomplus/archive/2009/04/28/1444988.html

1, 什么是Synonym
Synonym(同义词)是Sql 2005的新特性。推出已经好几年了。你可以简单的理解Synonym 为其他表的别名。我们使用Northwind数据库为例。比如,看下面的例子

Create Synonym MyCustomers FOR Customers

为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.

Create Synonym MyCustomers For Northiwind.dbo.Customers 

需要注意的是,后面需要写清那个数据库,那个表,中间dbo为表的owner.
然后,运行 Insert into MyCustomers  (CustomersID, CompanyName) values ('Tom', 'MS')
和Select * from MyCustomers. 看看是不是真的像普通表那样。

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

Create Synonym MyCustomers For SqlTest.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. 如图:

Sql2005的Server Managerment Studio有这么一项,选择后,会出现下面画面。添入名称等,选择object的类型,你就可以选为View,Table, Sprocs和udf创建Synonym了。


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

select * from openquery([SqlTest], 'exec northwind.dbo.[Customers By City] @param1=N''London''') where CustomerID = '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,我们可以实现不同数据库,以及不同服务器之间的数据分流。以达到平衡负载的目的,提高效率的目的。

SQL 2005 中查询或执行另外的数据库操作的方法的更多相关文章

  1. SQL Server中查询用户的对象权限和角色的方法

    --SQL Server中查询用户的对象权限和角色的方法 -- 查询用户的object权限 exec sp_helprotect NULL, 'sa' -- 查询用户拥有的role exec sp_h ...

  2. 【SQL Server数据迁移】32位的机器:SQL Server中查询ORACLE的数据

    从SQL Server中查询ORACLE中的数据,可以在SQL Server中创建到ORACLE的链接服务器来实现的,但是根据32位 .64位的机器和软件,需要用不同的驱动程序来实现. 在32位的机器 ...

  3. SQL 语句在查询分析器执行很快,程序 Dapper 参数化查询就很慢(parameter-sniffing)

    这个问题困扰我好长时间了,使用SQLSERVER 事务探查器找到执行超时的SQL语句,参数查询都是通过执行exe sp_executesql 的存储过程调用,因为它能够分析并缓存查询计划,从而优化查询 ...

  4. 【SQL Server数据迁移】64位的机器:SQL Server中查询ORACLE的数据

    从SQL Server中查询ORACLE中的数据,可以在SQL Server中创建到ORACLE的链接服务器来实现的,但是根据32位 .64位的机器和软件, 需要用不同的驱动程序来实现. 在64位的机 ...

  5. PL/SQL Developer 查看查询的执行计划

    https://zhuanlan.zhihu.com/p/65771352 通过 PL/SQL Developer 查看查询的执行计划 1 什么是执行计划 执行计划是一条查询语句在 Oracle 中的 ...

  6. Sql Server中查询今天、昨天、本周、上周、本月、上月数据

    Sql Server中查询今天.昨天.本周.上周.本月.上月数据 在做Sql Server开发的时候有时需要获取表中今天.昨天.本周.上周.本月.上月等数据,这时候就需要使用DATEDIFF()函数及 ...

  7. sql server中如何查看执行效率不高的语句

    sql server中,如果想知道有哪些语句是执行效率不高的,应该如何查看呢?下面就将为您介绍sql server中如何查看执行效率不高的语句,供您参考.   在测量功能时,先以下命令清除sql se ...

  8. SQL 2005中char、nchar、varchar、ntext and nvarchar(max)的区别

    原文地址 MS SQL大值数据类型varchar(max).nvarchar(max).varbinary(max) 在MS SQL2005及以上的版本中,加入大值数据类型(varchar(max). ...

  9. [SQL] sql server中如何查看执行效率不高的语句

    sql server中,如果想知道有哪些语句是执行效率不高的,应该如何查看呢?下面就将为您介绍sql server中如何查看执行效率不高的语句,供您参考.在测量功能时,先以下命令清除sql serve ...

随机推荐

  1. IOS-Plist文件存储(1)

    1.什么是一个文件系统? IOS每个应用程序都有自己的文件系统.并且有一个相应的接入,一般分 ~/Documents/ ~/tmp/ ~/Library/Caches/ ~/Library/Prefe ...

  2. C++ tree(1)

    建立与基本操作 .有关二叉树的相关概念,这里不再赘述,假设不了解二叉树相关概念,建议先学习数据结构中的二叉树的知识点 准备数据 定义二叉树结构操作中须要用到的变量及数据等. #define MAXLE ...

  3. ASP.NET文件上传和下载

    大学最近作出相关的需求进行上传和下载文件的网站(求为:站点发布的通知,在后台要能给每一个通知加入附件.在前台要能显示并下载附件),之前仅仅是学习过关于上传的 理论知识,这里实践了一下下,与大家分享一下 ...

  4. 高性能 TCP & UDP 通信框架 HP-Socket v3.2.3 正式公布

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包括服务端组件.client组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#. ...

  5. HDOJ 4248 A Famous Stone Collector DP

    DP: dp[i][j]前i堆放j序列长度有多少行法, dp[i][j]=dp[i-1][j] (不用第i堆), dp[i][j]+=dp[i-1][j-k]*C[j][k] (用第i堆的k个石头) ...

  6. hdu 4870 Rating(可能性DP&高数消除)

    Rating Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  7. Asp.Netserver控制发展Grid实现(一个)UI转让

    使用Asp.Net办Web开发时间,控制系统提供了,目的,有时很难达到理想的.然后,有几种方法来解决,例如,使用html+js形式,在所需界面的布局的前端,然后通过ajax和其他方式获得的数据.为了实 ...

  8. Chain of Responsibility - 责任链模式

    定义 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合度. 案例 比方如今有一个图形界面,它包含一个应用Application类,一个主窗体Window,一个buttonButton ...

  9. android使用ffmpeg

    cygwin上文编译文章. 在ffmpeg/arm添加的文件夹Android.mk 的主要目的是为了宣布动态库libs下一个 LOCAL_PATH:= $(call my-dir) include $ ...

  10. 网络资源(3) - iBatis视频

    2018_08_24 http://v.youku.com/v_show/id_XMjk2ODY2OTE2.html iBatis视频教程01