`

利用同义词简化SQL Server 2005开发

阅读更多


一. 引言

  如果你曾经使用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分钟相加应该是个不少的数目吧!
分享到:
评论

相关推荐

    利用同义词构建SQLserver与Oracle数据库之间的访问接口

    在进行数据分析时,优势需要关联分析Oracle与SQL ...一般做法是利用OLEDB将数据导入到一个数据库中,也可以在SQL server中建立一个虚拟连接,将Oracle中数据表虚拟到SQL server中,视同本地表使用,极大方便数据分析。

    SQL Server 2005数据库简明教程PPT

    第3部分(第10~14章)详细介绍了SQL Server 2005的一些高级话题,如存储过程、触发器、约束、同义词,以及数据库的备份和还原、安全管理技术,数据的分析与挖掘等内容。为提高读者的应用开发能力,本书第15章提供了电子...

    全文索引同义词SQL

    全文索引同义词SQL

    同义词,英汉词典,近20多个数据表词库,sqlserver_2005sqlserver词库

    同义词,康熙词典,反义词,英汉速查等英汉词典,近20多个数据表词库,sqlserver_2005sqlserver词库

    SQL Server 2008宝典

    第4部分为数据库管理篇,介绍如何使用T-SQL程序对数据进行复杂的运算,以及如何使用视图、存储过程、触发器、索引、用户定义数据类型、用户定义函数、全文索引、游标、事务和锁、统计信息和同义词等方面的知识;...

    同义词词林(扩展版)

    《同义词词林(扩展版)》每个词的类编码就应该包含了他全部的信息。 对于原版同义词词林,编码的第一个字母代表该词所属的大类,第二个字母代表中类,后两位字母代表小类。 同义词词林原版是梅家驹先生人工构造的,...

    SQL Server 2008宝典.(电子工业.刘智勇.刘径周).part2

    第4部分为数据库管理篇,介绍如何使用T-SQL程序对数据进行复杂的运算,以及如何使用视图、存储过程、触发器、索引、用户定义数据类型、用户定义函数、全文索引、游标、事务和锁、统计信息和同义词等方面的知识;...

    SQL Server 2008宝典.(电子工业.刘智勇.刘径周).part1

    第4部分为数据库管理篇,介绍如何使用T-SQL程序对数据进行复杂的运算,以及如何使用视图、存储过程、触发器、索引、用户定义数据类型、用户定义函数、全文索引、游标、事务和锁、统计信息和同义词等方面的知识;...

    SQLServer表只读

    declare @table_name varchar(100) declare @sql_dr varchar(4000) declare @sql_cr varchar(4000) set @table_name='t_hq_m_member_log' --在此输入需要只读的表,其它地方请勿修改! .......................

    SQL Server 2008管理员必备指南(超高清PDF)Part3

    8.3.5 创建和使用同义词库文件 第9章 管理SQL Server 2008的安全性 9.1 SQL Server 2008安全性概况 9.1.1 使用安全主体和安全对象 9.1.2 理解安全对象的权限 9.1.3 检查授予安全对象的权限 9.2 SQL Server 2008的...

    SQL Server 2008管理员必备指南(超高清PDF)Part1

    8.3.5 创建和使用同义词库文件 第9章 管理SQL Server 2008的安全性 9.1 SQL Server 2008安全性概况 9.1.1 使用安全主体和安全对象 9.1.2 理解安全对象的权限 9.1.3 检查授予安全对象的权限 9.2 SQL Server 2008的...

    SQL Server 2005(入门到精通教程+常考笔试面试试题)

    1、sqlserver2005概述 2、T-SQL查询 3、事务与锁 4、索引 5、约束、同义词、缺省值、自定义数据类型、规则 6、视图、存储过程、函数、游标与触发器 7、数据库安全 8、备份与恢复 9、分区表 10、数据库优化 11、开发...

    SQL Server 2008管理员必备指南(超高清PDF)Part2

    8.3.5 创建和使用同义词库文件 第9章 管理SQL Server 2008的安全性 9.1 SQL Server 2008安全性概况 9.1.1 使用安全主体和安全对象 9.1.2 理解安全对象的权限 9.1.3 检查授予安全对象的权限 9.2 SQL Server 2008的...

    哈工大同义词词林近义词计算(python、Java)

    哈工大的同义词词林扩展版,用于获取近义词的python代码和Java代码

    同义词词典 中文同义词词库

    同义词词典 中文同义词词库,access版本

    汉语最全同义词列表,汉语同义词词典,Python

    在做自然语言处理是可以用于同义词的字典的构建

    SQL Server 2008宝典.(电子工业.刘智勇.刘径周).part4

    第4部分为数据库管理篇,介绍如何使用T-SQL程序对数据进行复杂的运算,以及如何使用视图、存储过程、触发器、索引、用户定义数据类型、用户定义函数、全文索引、游标、事务和锁、统计信息和同义词等方面的知识;...

    哈工大同义词词林.zip

    哈工大同义词词林 zip

    火车头同义词替换包下载,最新完整版完善的同义词大全

    火车头同义词替换包下载,最新完整版完善的同义词大全 【1词对1词,适合火车头替换】 边疆,边境 本领,本事 察看,查看 除草,锄草 【1词对多个同义词】 依照,按照,遵照,遵守,根据,依据,遵从,遵循 辨认,辩别,辨别,鉴别...

    哈工大同义词词林扩展版.zip

    学习NLP的同学在进行同义词替换、关键词扩展等操作时常用到同义词词林,哈工大社会计算与信息检索研究中心同义词词林扩展版,较为适用,有需要的可下载使用

Global site tag (gtag.js) - Google Analytics