利用同义词简化SQLServer2005开发

<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 728x15, 创建于 08-4-23MSDN */ google_ad_slot = "3624277373"; google_ad_width = 728; google_ad_height = 15; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 160x600, 创建于 08-4-23MSDN */ google_ad_slot = "4367022601"; google_ad_width = 160; google_ad_height = 600; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
一.引言

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


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

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

  二.熟悉同义词

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


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

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

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


  图1显示出相应的结果:



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

三.几点细节

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

  ·表

  ·视图

  ·存储过程

  ·CLR存储过程

  ·CLR函数

  ·复制过滤过程

  ·扩展存储过程

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

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

  ·SELECT

  ·sub-selects

  ·UPDATE

  ·INSERT

  ·DELETE

  ·EXECUTE

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

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

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

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

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

DROPSYNONYMProdCat
CREATESYNONYMProdCat
FORAdventureWorks.Production.ProductCategory
SELECT*FROMProdCat
DROPSYNONYMProdCat
CREATESYNONYMProdCat
FORAdventureWorks.Production.Culture
SELECT*FROMProdCat
  注意,当你任何时候想改变一个同义词时,你需要使用DROP和CREATE;不存在ALTERSYNONYM语句。图2显示出运行这个批处理语句的结果。1

<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 728x15, 创建于 08-4-23MSDN */ google_ad_slot = "3624277373"; google_ad_width = 728; google_ad_height = 15; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 160x600, 创建于 08-4-23MSDN */ google_ad_slot = "4367022601"; google_ad_width = 160; google_ad_height = 600; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
阅读更多
上一篇一个比较好的分页存储过程
下一篇sql语句简单解决同个字段不同标识的具体意义
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭