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

原文: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,我们可以实现不同数据库,以及不同服务器之间的数据分流。以达到平衡负载的目的,提高效率的目的。

时间: 2024-08-01 10:46:55

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

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

--SQL Server中查询用户的对象权限和角色的方法 -- 查询用户的object权限 exec sp_helprotect NULL, 'sa' -- 查询用户拥有的role exec sp_helpuser 'public' -- 查询哪些用户拥有指定的系统role exec sp_helpsrvrolemember 'sysadmin' -- 可查询嵌套role WITH tree_roles as ( SELECT role_principal_id, member_principa

SQL 2005 中的XML类型 .

SQL 2005 中的XML类型 . http://blog.csdn.net/sgear/article/details/7349657 SQL Server 2005的XmL数据类型之基础篇一.引言如今,在SQL Server 2005中,XML成为第一流的数据类型.借助于基于XML模式的强类型化支持和基于服务器端的XML数据校验功能,现在,开发者可以对存储的XML文档进行轻松的远程修改.作为数据库开发者,许多人都必须大量地涉及XML. 如今,在SQL Server 2005中,你能以一种新

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

从SQL Server中查询ORACLE中的数据,可以在SQL Server中创建到ORACLE的链接服务器来实现的,但是根据32位 .64位的机器和软件,需要用不同的驱动程序来实现. 在64位的机器上,通过访问接口:OracleProvide for OLE DB,来实现. 1.机器环境和软件环境 操作系统是:windows 7旗舰版 64位,SQL Server 20008R2  64  位,Oracle 11g 11.2.0.1.0   64 位. 2.ORACLE环境的设置 连接orac

在 SQL Server 中查询EXCEL 表中的数据遇到的各种问题

原文:在 SQL Server 中查询EXCEL 表中的数据遇到的各种问题 SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="D:\KK.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$] 问题: 消息 15281,级别 16,状态 1,第 1 行 SQL Server 阻止了对组件 'Ad Hoc Di

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

sql server中,如果想知道有哪些语句是执行效率不高的,应该如何查看呢?下面就将为您介绍sql server中如何查看执行效率不高的语句,供您参考. 在测量功能时,先以下命令清除sql server的缓存 dbcc freeProcCache 在点击某个按钮,执行完后,再执行下面语句,就可以知道系统运行什么Sql和多少次了,其主要慢语句是那些了; SELECT creation_time  N'语句编译时间'         ,last_execution_time  N'上次执行时间'

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

sql server中,如果想知道有哪些语句是执行效率不高的,应该如何查看呢?下面就将为您介绍sql server中如何查看执行效率不高的语句,供您参考.在测量功能时,先以下命令清除sql server的缓存 dbcc freeProcCache 在点击某个按钮,执行完后,再执行下面语句,就可以知道系统运行什么Sql和多少次了,其主要慢语句是那些了; SELECT creation_time N'语句编译时间' ,last_execution_time N'上次执行时间' ,total_phys

【转载】SQL Server中查询CPU占用高的SQL语句

本文导读:触发器造成死锁.作业多且频繁.中间表的大量使用.游标的大量使用.索引的设计不合理.事务操作频繁.SQL语句设计不合理,都会造成查询效率低下.影响服务器性能的发挥.我们可以使用sql server自带的性能分析追踪工具sql profiler分析数据库设计所产生问题的来源,进行有针对性的处理:下面介绍SQL Server中如何查询CPU占用高的SQL语句 SQL Server中查询CPU占用高的情况,会用到sys.sysprocesses ,dm_exec_sessions ,dm_ex

sql server中使用链接服务器访问oracle数据库

一.  安装配置oracle客户端 要访问orcale数据,必须在访问的客户端机器上安装oracle客户端. Orcale有两种形式的客户端: l         完整的客户端 包括访问服务器端数据库的基本Oracle 的 Microsoft OLE DB 访问接口需要 Oracle Client Software Support File以及 SQL*Net .还包括用于配置客户端设置的工具.sqlplus.企业管理器等一系列的工具. l         立即客户端(instant clien

Spring中使用JdbcTemplate和HibernateTemplate的数据库操作

目前我接触到的Spring的数据库操作主要包括两种,主要使用JdbcTemplate和HibernateTemplate.后者用于结合Hibernate操作. 两者都提供了持久层访问模板化,只需要获得一个SessionFactory就可以执行持久化操作.可以完成增删改查操作. 获取JdbcTemplate和HibernateTemplate的方式有两种 1. 传统的方式 2. 使用JdbcDaoSupport和HibernateDaoSupport获取,其包含两个方法. (1) getHiber