C# 3.0, Linq, Linq To Sql
版权声明:本Blog内的所有文章如非特别注明,版权均归作者个人所有,任何外部引用或摘抄请注明原文地址,未经作者授权不得用于任何以营利目的的行为,谢谢合作! Name: Tom Song MSN: sguoan@hotmail.com
摘要:如果,你想在一台数据库服务器上,查询另一个台数据服务器的数据该如何做呢?如果,你想在同一台数据服务器上,在不同的数据库之间查询数据,又该怎么办呢?那就让我为你介绍Synonym和openquery吧。1, 什么是SynonymSynonym(同义词)是Sql 2005的新特性。推出已经好几年了。你可以简单的理解Synonym 为其他表的别名。我们使用Northwind数据库为例。比如,看下面的例子
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创建SynonymSynonym不光可以对表创建,也可以为view,sprocs,以及udf创建相应的Synonym. 如图:Sql2005的Server Managerment Studio有这么一项,选择后,会出现下面画面。添入名称等,选择object的类型,你就可以选为View,Table, Sprocs和udf创建Synonym了。6, openquery相对于Synonym,OpenQuery相对来说,功能就弱了点。其只是在调用其它数据库上的sprocs.比如
sp_addlinkedserver [ @server = ] 'server'
[ , [ @srvproduct = ] 'product_name' ]
[ , [ @provider = ] 'provider_name' ]
[ , [ @datasrc = ] 'data_source' ]
[ , [ @location = ] 'location' ]
[ , [ @provstr = ] 'provider_string' ]
[ , [ @catalog = ] 'catalog' ]
这就是在执行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,我们可以实现不同数据库,以及不同服务器之间的数据分流。以达到平衡负载的目的,提高效率的目的。参考文献:sp_addlinkedserver SYNONYM in SQL Server 2005How and why should I use SQL Server 2005 synonyms?Using Synonyms in SQL Server 2005
昵称: [登录] [注册]
主页:
邮箱:(仅博主可见)
验证码: 看不清,换一个
评论内容:
登录 注册
[使用Ctrl+Enter键快速提交评论]
Powered by: 博客园 Copyright © Tom Song