由浅入深讲解数据库中Synonym的使用方法
1.Synonym的概念
Synonym(同义词)是SQL Server 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,此存储过程定义如下所示:
Exec sp_droplinkedsrvlogin davalSQL2005,Null
Exec sp_dropServer davalSQL2005
EXEC sp_addlinkedServer
@Server='davalSQL2005',--被访问的服务器别名
@srvproduct='',
@provider='SQLOLEDB',
@datasrc='D12' --要访问的服务器
EXEC sp_addlinkedsrvlogin
'false',
NULL,
'sa', --账号
'123456' --密码
Select * from MyCustomers
例如
Exec sp_droplinkedsrvlogin DB98,Null
Exec sp_dropServer DB98
EXEC sp_addlinkedServer
@Server='DB98',--被访问的服务器别名
@srvproduct='DB98',
@provider='SQLOLEDB',
@datasrc='10.72.240.121' --要访问的服务器的ip地址
EXEC sp_addlinkedsrvlogin
'DB98', --被访问的服务器别名
'false', NULL,
'oaflow', --账号
'123456' --密码
由浅入深讲解数据库中Synonym的使用方法的更多相关文章
- 使用JDBC从数据库中查询数据的方法
* ResultSet 结果集:封装了使用JDBC 进行查询的结果 * 1. 调用Statement 对象的 executeQuery(sql) 方法可以得到结果集 * 2. ResultSet 返回 ...
- 讲解Canvas中的一些重要方法
Canvas所提供的各种方法根据功能来看大致可以分为几类: 第一是以drawXXX为主的绘制方法: 第二是以clipXXX为主的裁剪方法: 第三是以scale.skew.translate和rotat ...
- Ext.net中Combobox如何绑定数据库中的值-通用方法
今天在项目中再次碰到了问题,就是Combobox中的值如果是直接绑定很简单.简单添加项就行了.代码如下: <ext:ComboBox ID=" /> </Items> ...
- 各个数据库中top 的表示方法
Select Top在不同数据库中的使用用法: 1. Oracle数据库 SELECT * FROM TABLE1 WHERE ROWNUM<=N 2. Infomix数据库 SELECT FI ...
- 随机获得MySQL数据库中100条数据方法 驾照题库项目 MVC架构 biz业务层的实现类 根据考试类型rand或order通过dao数据访问层接口得到数据库中100或全部数据
package com.swift.jztk.biz; import java.util.Collections; import java.util.Comparator; import java.u ...
- 数据库中substring的使用方法 CONVERT(varchar(12) , getdate(), 112 )
Sqlserver中经常要操作一些时间类型的字段转换,我又不太记得住,所以搜集了以下的一些SqlserverConvertDateTime相关的资料发表在自己的小站里,方便自己以后要用的时候寻找,望对 ...
- 【转】详细讲解Java中log4j的使用方法
转载地址:http://www.233.com/Java/zhuangye/20070731/142625631.html 1.Log4j是什么? Log4j可以帮助调试(有时候debug是发挥不了作 ...
- php写入数据到mysql数据库中出现乱码解决方法
乱码情况: 在选择数据库前加入一句代码即可 mysql_query("set names utf8"); 最后效果
- [EntityFramework]记录Linq中如何比较数据库中Timestamp列的方法(如大于0x00000000000007D1的记录)
Timestamp对于EF实体的类型是byte[] class Program { static void Main(string[] args) { using (var context = new ...
随机推荐
- 判断一个整数是否是回文数C++实现 leetcode系列(九)
判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向 ...
- C语言学习小记
2013年1月31日 今天试着编程为报文去头去尾. #include #include #define MAX_LENTH 1024 int main() { char *path = &quo ...
- Idea怎么添加类的注释模板
Idea添加类的注释模板: File-->Settings-->Live Templates-->点击+号按钮添加模板 添加自定义分组名,添加自定义模板名,如图所示add,添加完成后 ...
- python中使用easygui
在阅读<跟孩子一起学编程>的同学对easygui应该不会陌生.书中给出的下载链接有时会连不上,可以试一下http://www.ferg.org/easygui/download.html ...
- KafkaZookeeper2-ZookeeperClient
介绍 ZookeeperClient 是 kafka 新写的客户端,它允许用户流水线式(并行)访问 zookeeper. 为什么放弃了 zkClient? zkClient 是一个第三方的客户端. 它 ...
- hiho 172周 - 二维树状数组模板题
题目链接 描述 You are given an N × N matrix. At the beginning every element is 0. Write a program supporti ...
- Glidar测试安装
在上一篇随笔中,我们完成了对Glidar 仿真器的概念层面的认识.接下来,我们将着手对该该仿真器进行安装测试. 1 依赖库的安装 安装环境为Windows 7 64位+Ubuntu14.04 LTS的 ...
- vue.js---methods中一个方法调用另一个方法
new Vue({ el: '#app', data: { test:111, }, methods: { test1:function(){ alert(this.test) }, test2:fu ...
- Manacher 求最长回文子串算法
Manacher算法,是由一个叫Manacher的人在1975年发明的,可以在$O(n)$的时间复杂度里求出一个字符串中的最长回文子串. 例如这两个回文串“level”.“noon”,Manacher ...
- Obfuscating computer code to prevent an attack
A method and system for obfuscating computer code of a program to protect it from the adverse effect ...