sql server 2005 中的同義詞

2021-09-08 20:53:39 字數 2628 閱讀 7408

在sql server 2005中,終於出現了同義詞了,大大方便了使用。

同義詞是用來實現下列用途的資料庫物件:

為本地或遠端伺服器上的另乙個資料庫物件(稱為「基物件」)提供備選名稱。

提供乙個提取層,該層防止客戶端應用程式的基物件的名稱或位置被更改。

例如,名為 server1 的伺服器上有 adventure works 的 employee 表。若要從另一台伺服器 server2 引用此表,客戶端應用程式必須使用由四個部分構成的名稱 server1.adventureworks.person.employee。另外,如果更改了表的位置(例如,更改到另一台伺服器上),那麼需要修改客戶端應用程式以反映所做的更改。

若要解決這兩個問題,您可以在 server2 上為 server1 上的 employee 表建立乙個同義詞 emptable。這樣,客戶端應用程式只需使用由乙個部分構成的名稱 emptable 來引用 employee 表。另外,如果 employee 表的位置發生變化,則必須修改同義詞 emptable 以指向 employee 表的新位置。由於沒有 alter synonym 語句,因此,必須先刪除同義詞 emptable,然後使用同樣的名稱重新建立該詞,但必須指向 employee 的新位置。

同義詞從屬於架構,並且與架構中的其他物件一樣,其名稱必須是唯一的。您可以為下列資料庫物件建立同義詞。

程式集 (clr) 儲存過程

程式集 (clr) 錶值函式

程式集 (clr) 標量函式

程式集 (clr) 聚合函式

複製篩選過程

擴充套件儲存過程

sql 標量函式

sql 錶值函式

sql 內聯錶值函式

sql 儲存過程

檢視表1(使用者定義)

1 包括本地和全域性臨時表

注意: 

不支援由四個部分構成的函式基物件名稱。

同義詞不能是另一同義詞的基物件,且同義詞不能引用使用者定義的聚合函式。

同義詞與其基物件之間只是按名稱繫結。對基物件的存在性、型別和許可權檢查都在執行時執行。因此,可以修改或刪除基物件,也可以先刪除基物件,然後用與原始基物件同名的另乙個物件來替換該基物件。例如,有乙個引用 adventure works 中的 person.contact 表的同義詞 mycontacts。如果將 contact 表刪除,並用名為 person.contact 的檢視替換該錶,則 mycontacts 將引用 person.contact 檢視。

同義詞的引用不是繫結到架構的。因此,可以隨時刪除同義詞。但刪除同義詞後,會留下已刪除同義詞的無關聯引用,而只有在執行時才會發現這些引用。

同義詞和架構

如果預設架構不是您的而您希望建立同義詞,那麼必須使用您擁有的架構的名稱來限定同義詞名稱。例如,如果您擁有架構 x,但 y 是預設架構,那麼使用 create synonym 語句時,必須在同義詞名稱前新增架構 x,而不是使用由乙個部分構成的名稱來命名同義詞。有關如何建立同義詞的詳細資訊,請參閱 create synonym (transact-sql)。

授予同義詞的有關許可權

只有同義詞所有者、db_owner 的成員或 db_ddladmin 的成員才能授予同義詞的有關許可權。

可以授予、拒絕和撤消對同義詞的下列所有許可權或任一許可權:

control

delete

execute

insert

select

take ownership

update

可以在一些 sql 語句和表示式上下文中使用同義詞替代其引用的基物件。下表包含了一些語句和表示式上下文。

select

insert

update

delete

execute

巢狀的 select

出現在動態 sql 中的 dml 和 ddl 語句。1

1 同義詞無法與全文 ddl 一起使用。

在以前說明的上下文中使用同義詞時,該基物件受到影響。例如,如果某個同義詞引用了基物件(表)並且將行插入同義詞中,則實際上將行插入到引用的表中。

下列許可權語句只與同義詞關聯,而不與基物件關聯。

grant

deny

revoke

同義詞不是繫結到架構的,因此無法被下列繫結到架構的表示式上下文所引用。

check 約束

計算列缺省的表示式

規則表示式

繫結到架構的檢視

繫結到架構的函式

有關繫結到架構的函式的詳細資訊,請參閱建立使用者定義函式(資料庫引擎)。

示例以下示例首次建立將在此後的示例中使用的同義詞。

use tempdb;

gocreate synonym myaddresstype

for adventureworks.person.addresstype;

go以下示例將行插入到由 myaddresstype 同義詞引用的基表。

use tempdb;

goinsert into myaddresstype (name)

values ('test');

go以下示例闡述了如何在動態 sql 中引用同義詞。

use tempdb;

goexecute ('select name from myaddresstype');

goview definition

sql server 2005中的output子句

今天看了下sql server 2005中的output子句,以使您可以從修改語句 insert update delete 中將資料返回到表變數中。帶結果的 dml 的有用方案包括清除和存檔 訊息處理應用程式以及其他方案。這一新的 output 子句的語法為 output into table v...

With在sql server 2005中的用法

with在msdn中的講解,可以參考鏈結 1 2 建立錶值變數型別 3 4create type ty newareagoods as table 5 areaid int notnull,6 goodsid int notnull 7 8 9 創鍵返回今天 的資料 10 根據有 的地區獲取參 11...

sql server 2005中的output子句

今天看了下sql server 2005中的output子句,以使您可以從修改語句 insert update delete 中將資料返回到表變數中。帶結果的 dml 的有用方案包括清除和存檔 訊息處理應用程式以及其他方案。這一新的 output 子句的語法為 output into table v...