以前一直认为SqlServer中的同义词(Synonym)没有什么用处,所以也一直没有去查它的语法格式。今天碰到一个问题,用Synonym来解决再好不过了。问题是这样子的,我的系统中用到了多个数据库,然后因为各个数据库中的某些数据需要同步,所以我就在其中的某个数据库中的表中添加触发器,来同步更新其它数据库中的数据。举例如下:
有两个数据库A和B,分别有表a1与b1,然后我在表a1创建了触发器来更新表b1中的数据,触发器大概如下:

create trigger tu_a1 after update
as
……
update t2 set t2.字段=t1.字段
from inserted t1,B..b1 t2 where t1.字段=t2.字段

反正就是,我在a1的触发器中用到了B..这种方式来引用数据库B中的对象。

然后问题就来了,今天老板说在同一台服务器上要同时安装多个系统。那么就需要把数据库A和数据库B复制多份,当然复制出来的数据库名字就不能叫A和B了,可能叫A1与B1。那么A1中的触发器就不能更新B1中的数据了,因为A1中的触发器是使用B..这种方式来引用的。这种情况下,必须将全部的B..全部换成B1..。这样,如果这样引用的地方多了,那就是一场灾难了。

使用同义词Synonym就能很好的解决这个问题,首先大概说一下同义词(Synonym)的作用。
同义词:就是定义一个字符串名称,用来代替一个有意义的引用对象。

在上例中,我可以用Bb1这个字符串来代代B..b1,那么以后我要操作B..b1这表,就可以直接操作Bb1,与操作前者一样的效果。那么,在部署多套系统时,只需修改一下新数据库中这个同义词的引用就可以了,触发器根本不需要修改。

下面是“创建,删除,引用”同义词的sql语句示例,注意,同义词不提供修改的功能,所以一旦创建了,就只能删除再重建,是不能够修改的。

创建同义词
create synonym Bb1
from B..b1

使用同义词
insert into Bbl(……) values (……)

引用同义词
select * from Bbl

删除同义词
drop synonym Bb1

查询所有同义词
select * from sys.synonyms

注意:只有SqlServer2005及以后的版本中才有Synonym。ong>。

SQLServer中同义词Synonym的用法的更多相关文章

  1. SQLServer中exists和except用法

    一.exists 1.1 说明 EXISTS(包括 NOT EXISTS)子句的返回值是一个BOOL值.EXISTS内部有一个子查询语句(SELECT ... FROM...),我将其称为EXIST的 ...

  2. sqlserver中case when then用法

    sql语句判断方法之一,Case具有两种格式,简单Case函数和Case搜索函数. --简单Case函数 (CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' E ...

  3. Sqlite和Mysql和SqlServer中insert … select … where not exist的用法

    下面介绍Mysql和Sqlite和Sqlserver中,根据select的条件判断是否插入.例如: 一.Mysql中: INSERT INTO books (name) SELECT 'SongXin ...

  4. SQLServer中的数据库备份和还原

    更多资源:http://denghejun.github.io 备份 SQLServer中的备份,这里是T-SQL的用法,具体示例代码如下,使用也相对简单,其中TestDatabase 是指所需备份的 ...

  5. SQLSERVER中的ALL、PERCENT、CUBE关键字、ROLLUP关键字和GROUPING函数

    SQLSERVER中的ALL.PERCENT.CUBE关键字.ROLLUP关键字和GROUPING函数 先来创建一个测试表 USE [tempdb] GO )) GO INSERT INTO [#te ...

  6. SQL点滴18—SqlServer中的merge操作,相当地风骚

    原文:SQL点滴18-SqlServer中的merge操作,相当地风骚 今天在一个存储过程中看见了merge这个关键字,第一个想法是,这个是配置管理中的概念吗,把相邻两次的更改合并到一起.后来在tec ...

  7. ASP.NET中application对象的用法(面试题)

    ASP.NET中application对象的用法 本文导读:Application对象是HttpApplicationState类的一个实例,Application状态是整个应用程序全局的.Appli ...

  8. SqlServer中的merge操作(转载)

    SqlServer中的merge操作(转载)   今天在一个存储过程中看见了merge这个关键字,第一个想法是,这个是配置管理中的概念吗,把相邻两次的更改合并到一起.后来在technet上搜索发现别有 ...

  9. SQLServer中数据加密方法

    对SQLServer中的数据进行加密,有三种方法, 1.  在程序语言中先对数据进行加密后再把加密后的数据保存在SQLServer数据库中: 2.  利用SQLServer未公开的加密密码函数,在SQ ...

随机推荐

  1. 《从零開始学Swift》学习笔记(Day5)——我所知道的标识符和keyword

     Swift 2.0学习笔记(Day5)--我所知道的标识符和keyword   原创文章,欢迎转载.转载请注明:关东升的博客 好多计算机语言都有标识符和keyword,一直没有好好的总结,就是这 ...

  2. 汇编 -- Hook API (MessageBoxW)

    说到HOOK.我看了非常多的资料和教程.无奈就是学不会HOOK.不懂是我的理解能力差.还是你们说的 不够明确,直到我看了下面这篇文章,最终学会了HOOK: http://blog.sina.com.c ...

  3. [NOI.AC#32]sort 构造

    链接 50分做法(只有0,1) 根据归并排序的思想,假设我们现在已经把 \(l\dots mid\) 和 \(mid+1\dots r\) 排好序 只要把左边连续的1和右边连续的0翻转即可 inlin ...

  4. JAVA设计模式之【职责链模式】

    职责链模式 专门处理请求链式传递的模式 角色 Handler抽象处理者 ConcreteHandler具体处理者 在职责链模式中,很多对象由每一个对象对其下家的引用而连接成一条链,请求在这条链上传递, ...

  5. iframe 高度宽度自适应

    <iframe id="iframeHome" name="iframeHome" src="/Page/NewHome/GongZuoTai. ...

  6. dev c++与VC assist的杂记

    最近要处理一些数据,于是把旧本拿出来用用.但是发现旧本运行速度很慢. 分析之后发现是瑞星的老版本程序里面加了游戏的云存储节点的注册表键.果断把该键删了之后,CPU使用率从66%以上降到24%左右. 然 ...

  7. Android自定义TabBar

    转载请说明出处:http://www.sunhome.org.cn 我发现现在的移动开发界面都被iOS主导了,UI动不动设计出来的东西都是ios的风格,对于一个做Android的程序员来说甚是苦恼啊, ...

  8. TLCL

    参考阅读:http://billie66.github.io/TLCL/book/chap04.html 绝对路径 An absolute pathname begins with the root ...

  9. 【学习】JMS通信模式

    1.关于JMS的点对点模式 JMS的点对点模式下,多个消费者可以注册到同一个队列上,但是生产者的某个消息只能被一个消费者接收,在多个消费者间,生产者的消息被多个消费者循环接收,如当前有6个消息在队列中 ...

  10. 【原创】VMWare克隆或复制Linux虚拟机后无法上网的解决

    如果选择桥接,需要设置网卡通过哪个物理网卡桥接,桥接代表当前虚拟机通过本机的网卡直接连到网络中,本机网卡作为一个交换机直连.因此需要确定使用哪个网卡桥接,一般在单网卡的时候选择自动即可,多网卡时需要指 ...