程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 利用同義詞簡化SQL Server 2005開發

利用同義詞簡化SQL Server 2005開發

編輯:關於SqlServer

一. 引言

如果你曾經使用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許可權。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved