All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
SQL查询语句对象化的实现(C#)_[SQL,Server教程]
DataGrid资料_[Asp.Net教程]
SQL Server存储过程编写经验和优化_[SQL Server教程]
利用GridView显示主细表并添加打开、关闭功能_[Asp.Net教程]
利用PHP和AJAX创建RSS聚合器_[PHP教程]
Excel,数据导入到,Access、Sql,Server,中示例代码_[SQL,Server教程]
分析:中文搜索引擎百度排名初步观察_JavaScript技术_编程技术
不一样的项目,不一样的PHP_php资料_编程技术
大型系统上PHP令人不爽的九大原因_php资料_编程技术
直接获取插入数据后自增的id_[Asp.Net教程]
Reading number is top 10 pictures
The real super beauty15
On the verge of extinction of the beach1
Sora aoi on twitter5
Sora aoi be huged like a bear
锄禾日了几个人?
So beauty, will let you spray blood10
王艳写真温柔如水1
2012 national geographic daily picture1
乳娘帕梅拉安德森1
这才是真正的人体艺术4
Download software ranking
Tram sex maniac 2 (H) rar bag13
SQL2000 For 4IN1
Ashlynn Video3
中国结婚习俗实录
Tram sex maniac 2 (H) rar bag16
Unix video tutorial20
Unix video tutorial18
徐若瑄成名作“魔鬼天使”
Tram sex maniac 2 (H) rar bag8
The king of fighters 97(Mobile phone games-apk)
归海一刀 published in(发表于) 2014/2/3 6:42:46 Edit(编辑)
利用同义词简化SQL Server 2005开发_[SQL Server教程]

利用同义词简化SQL Server 2005开发_[SQL Server教程]

利用同义词简化SQL Server 2005开发_[SQL Server教程]


一. 引言

  如果你曾经使用SQL Server开发过任何软件,那么你肯定会习惯于使用四部分标识符来参考一个对象:


[[[server.][database].][schema_name].]object_name

  正如上面的方括号所显示的,该语法的不同部分可以被忽略,只要你提供足够的表达来无二义地标识你的对象即可。例如,下面所有这些表达都可能参考相同的对象:


Server1.AdventureWorks.Production.ProductCategory
AdventureWorks.Production.ProductCategory
AdventureWorks..ProductCategory
ProductCategory

  在大多数情况下,你可以仅使用三部分名字而忽略服务器名-除非你是在处理在一个连接的服务器上的对象。默认情况下,所有对象的上下文都是本地数据库-你的SQL语句在其中执行。但是,有些情况下,或者更为准确地说,你必须使用这整个四部分命名(或称作一种全称限定名)。但是,在SQL Server 2005中,这种情况有所改变。

  二. 熟悉同义词

  SQL Server 2005引入了一个同义词的概念,这是一个单部分的名字,它可以替换在许多SQL语句中的一个两、三或四部分的名字。使用同义词可以让你减少输入,而且还能提供一个抽象层来为你保护底层对象的改变。为了理解其工作原理,让我们先看一下创建同义词的语法。下面是CREATE SYNONYM语句的语法:


CREATE SYNONYM [schema_name.]synonym_name FOR object_name

  在此,object_name是一个SQL Server对象(全称限定已经足以能够标识出这个对象)的名字,而synonym_name是你想赋给它的新名字。如果你不想为同义词指定一种模式,那么SQL Server使用当前的用户的默认模式。当你创建同义词时,相应的对象不需要存在,因为同义词是迟绑定的:当你实际上使用同义词时,SQL Server仅仅检查基对象。

  例如,在AdventureWorks示例数据库中,你可以以下列方式创建一个同义词:


CREATE SYNONYM ProdCat
FOR AdventureWorks.Production.ProductCategory

  之后,你可以继续使用在SQL语句中的同义词了。例如:


SELECT * FROM ProdCat

  图1显示出相应的结果:



  当你使用完一个同义词后,你可以使用DROP SYNONYM语句来去掉它,它具有你期望的语法格式:


DROP SYNONYM [schema_name.]synonym_name
  三. 几点细节

  当然,对于同义词的使用上也存在一些限制。对于初学者来说,你不能为任何东西都创建一个同义词。SQL Server 2005比以前引入了更多的对象,但是同义词仅限于应用于核心集的最有用的一些对象中:

  · 表

  · 视图

  · 存储过程

  · CLR存储过程

  · CLR函数

  · 复制过滤过程

  · 扩展存储过程

  · SQL标量,表值以及内联表值函数

  关于在什么情况下使用同义词还存在一些限制。一般来说,你可以在下面这些T-SQL语句中使用一个同义词:

  · SELECT

  · sub-selects

  · UPDATE

  · INSERT

  · DELETE

  · EXECUTE

  如果你仔细考虑一下,那么第二个表不应该太奇怪:它包含了最常用的where语句。注意,你不能在一个DDL语句中参考一个同义词。如果你想使用ALTER TABLE来改变ProductCategory表中的内容,那么,你需要使用基表而不是使用ProdCat同义词。

  为了创建一个同义词,你需要CREATE SYNONYM权限。在创建一个同义词后,它就有了与其自己相关联的GRANT,DENY和REVOKE许可权。

  四. 把同义词作为一个抽象层

  除了节省你的输入时间外,同义词还可以用作你的数据库的不稳定的或经常更新部分的一个抽象层。这是因为同义词及其基对象之间的绑定仅在运行时刻检查,而不是在设计时刻。

  为了说明这个问题,如果你重新定义ProdCat同义词,请研究下面发生什么情况:


DROP SYNONYM ProdCat
CREATE SYNONYM ProdCat
FOR AdventureWorks.Production.ProductCategory
SELECT * FROM ProdCat
DROP SYNONYM ProdCat
CREATE SYNONYM ProdCat
FOR AdventureWorks.Production.Culture
SELECT * FROM ProdCat

  注意,当你任何时候想改变一个同义词时,你需要使用DROP和CREATE;不存在ALTER SYNONYM语句。图2显示出运行这个批处理语句的结果。



  注意,在此,语句SELECT * FROM ProdCat与前面的第二次执行结果悬殊很大,因为同义词被重新定义以参考一个不同的表。

  当然,你可以把这种行为应用于你自己的应用程序中。例如,假定你有一个程序,它需要分析来自于多种数据库的顾客数据。不是把基表与单个数据库连接起来或断开连接,或编写复杂的选择表格进行分析的SQL,而是使用同义词。定义一个同义词,例如DataTable,来参考你想使用的数据的四部分名字,并且重新定义它-无论何时你想要切换源数据。

  当然,这种迟绑定也是一把双刃剑。因为SQL Server并不追踪是否一个同义词指向任何东西,它也不会进行任何模式绑定排序。如果你删除一个应用于另一个语句中的同义词,那么你可能直到试图运行该语句时才发现出了问题。

  五. 小结

  你能够开发自己的下一个SQL Server应用程序而不使用同义词吗?当然可以。它们并没有为数据库表带来根本性的新内容;你可以总是使用完全限定名字-在任何你想使用一个同义词的地方。但是有时把这些"小东西"加入到你的产品是一件不错的事情,就因为它们能够实现更少的输入和带给开发者一种更容易的体验。也许在一个应用程序的开发过程的某一阶段同义词将仅会节省你10分钟时间,但是所有这些小的10分钟相加应该是个不少的数目吧!
来源:天极网





添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.