转
一. 引言
如果你曾经使用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分钟相加应该是个不少的数目吧!
分享到:
相关推荐
- 创建同义词可以简化对远程表的访问。 - 示例语句: ```sql CREATE SYNONYM OS_GIS_CELL FOR [ORACLELK]..[CMCC].OS_GIS_CELL; ``` #### 五、注意事项 1. **大小写敏感性**: - 在涉及Oracle部分的SQL语句中...
在实际应用中,开发人员可以利用ASP.NET技术来构建基于SQL Server 2005全文检索功能的Web应用程序。通过编程接口,可以轻松地将全文搜索功能整合到Web界面中,为用户提供直观且高效的搜索体验。 总之,SQL Server ...
HS_FDS_CONNECT_INFO="SERVER=SQLSERVER_HOSTNAME;DATABASE=pubs" HS_DB_NAME=pubs ``` - 如果 SQL Server 实例带有反斜杠 `\` 或端口号,则需按照特殊格式配置,例如: - 反斜杠实例:`192.168.1.1\\ng` - 带...
这部分内容将指导读者如何设置和管理用户权限,以及如何利用视图和同义词来控制数据访问。 此外,书中可能还会涵盖数据库备份与恢复策略,这对于任何数据库管理员来说都是必不可少的知识。了解如何正确地备份数据并...
例如,数据挖掘中常用的术语包括“知识发现”(Knowledge Discovery in Database,简称KDD)和“数据挖掘”(Data Mining,简称DM),这两个术语常常是同一过程的同义词,但KDD更强调从数据中提取知识的全过程,而DM...
本文将详细介绍如何在Oracle环境中实现跨库数据同步至特定服务器,并通过创建同义词来简化跨库查询的操作流程。整个过程分为五个步骤:配置TNS名称、创建数据库链接、编写存储过程、设置作业计划以及创建同义词。 #...
- **同义词**:创建同义词以简化SQL语句并增强数据访问的安全性。 #### 五、存储空间管理 随着数据量的增长,有效的存储空间管理变得至关重要。这一环节需要关注以下方面: - **数据文件组成**:了解当前数据库...
创建SQL Server的同义词,以简化查询: ```sql CREATE SYNONYM OS_GIS_CELL FOR [ORACLELK]..[CMCC].OS_GIS_CELL; SELECT * FROM os_gis_cell; SELECT * FROM os_gis_cell a WHERE a.CellName IS NULL; ``` 同义词...
- 全文索引支持复杂的文本搜索,如模糊匹配和同义词查找。 7. **视图** - 视图是虚拟表,基于一个或多个表的 SELECT 语句结果,提供了一种抽象数据的方式。 - 它们可以用来隐藏复杂查询,简化用户接口,或者提供...
- `CONTAINS`:此语句用于精确匹配或模糊匹配查询,支持使用逻辑运算符和关系运算符,例如`AND`、`OR`和`NEAR`,以及同义词和词组匹配。 - `FREETEXT`:相比`CONTAINS`,`FREETEXT`提供了更宽松的自然语言搜索,它...
在"基于ASP的批量替换采集文章同义词ACCESS版 v1.0.zip"这个项目中,我们可以推测这是一款利用ASP技术构建的工具,其功能主要是批量处理采集到的文章,通过同义词替换来提高内容的原创性和多样性。这在SEO(搜索引擎...
这与传统的基于精确匹配的索引不同,全文索引能进行模糊搜索和同义词查找,极大地增强了数据检索能力。 5. **视图**:视图是虚拟表,基于一个或多个表的SQL SELECT语句结果。视图可以简化复杂的查询,提供安全访问...
通过以上功能,Oracle SQL Developer成为了数据库开发人员的重要工具,它简化了数据库管理,增强了开发效率,并提供了丰富的功能集,以满足各种数据库开发需求。无论是日常的数据库维护还是复杂的开发项目,SQL ...
- **同义词创建**:为现有对象创建同义词,提高代码可读性和可维护性。 - **权限管理**:管理同义词的访问权限,控制用户对底层对象的访问。 #### 九、图表与报告 ##### 9.1 创建图表 - **数据可视化**:将查询结果...
它可以用于任何版本 8i 或以上的 Oracle 数据库服务器,并支持大部份 Oracle 最新版本的功能,包括目录、表空间、同义词、实体化视图、触发器、序列、类型等。 Navicat for PostgreSQL Navicat for PostgreSQL 是...
- **Decimal/Numeric、Float和Real**:Decimal和Numeric提供高精度的数值存储,而Float和Real则用于浮点数,其中Real是float(24)的同义词,用于较小精度的浮点数。 2. **如何读懂数据库设计图**: 在数据库设计中...
- 为简化访问,可以通过创建同义词来代替长的数据库连接名,但访问SQL Server的同义词不需要指定Object Type。 总结起来,透明网关设置是一个涉及多步骤的过程,包括安装网关软件、配置网关参数、监听服务调整以及...