首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2005 同義詞:簡化跨資料庫/伺服器物件參考的最佳實務

     編輯:關於SqlServer

四部件命名痛點

傳統參考遠端物件需完整四部件名稱:Server.Database.Schema.Object。程式碼散佈各處,遷移/重構時修改極其困難。

同義詞解決方案

同義詞 提供單一名稱別名,對應任意層級的基底物件,支援延遲綁定 (建立時基底物件可不存在)。

建立語法

CREATE SYNONYM [schema_name.]synonym_name FOR object_name;
-- object_name 可為四部件名稱

實用範例

-- 1. 簡化本地跨 Schema 參考
CREATE SYNONYM ProdCat FOR AdventureWorks.Production.ProductCategory;
SELECT * FROM ProdCat; -- 等同 SELECT * FROM AdventureWorks.Production.ProductCategory

-- 2. 封裝連結伺服器遠端資料表
CREATE SYNONYM RemoteOrders FOR [LINKED_SRV].Northwind.dbo.Orders;
SELECT CustomerID, OrderDate FROM RemoteOrders WHERE OrderDate > '2023-01-01';

-- 3. 隔離資料庫重構
-- 原: SELECT * FROM LegacyDB.dbo.OldTable
CREATE SYNONYM CurrentData FOR LegacyDB.dbo.OldTable;
-- 遷移後僅修改同義詞定義:CREATE SYNONYM CurrentData FOR NewDB.dbo.NewTable
-- 所有應用程式碼零修改

支援的基底物件類型

  • 資料表、檢視表
  • 預存程序、CLR 預存程序
  • 函數 (標量、表值、內嵌表值)、CLR 函數
  • 複寫過濾程序、擴展預存程序

可使用同義詞的 T-SQL 陳述式

  • SELECT、子查詢
  • INSERT、UPDATE、DELETE
  • EXECUTE (預存程序/函數)

不可用於 DDL:ALTER TABLE、CREATE INDEX、DROP TABLE 等需直接操作基底物件。

權限模型

  • 建立同義詞需 CREATE SYNONYM 權限。
  • 同義詞本身有獨立 GRANT/DENY/REVOKE 權限 (SELECT, EXECUTE 等)。
  • 實際存取基底物件時,仍檢查呼叫者對基底物件的權限。

管理指令

-- 查看同義詞定義
SELECT name, base_object_name FROM sys.synonyms;

-- 刪除
DROP SYNONYM [schema_name.]synonym_name;

-- 重新命名 (實為刪除重建)
DROP SYNONYM OldName; CREATE SYNONYM NewName FOR ...;

最佳實務

  1. 專案統一命名規範:syn__ (如 syn_HR_Employees)。
  2. 集中管理同義詞建立腳本,納入版控,部署時統一執行。
  3. 文件化同義詞對應關係,包含基底物件四部件名稱、用途、擁有者。
  4. 避免過度使用:本地同 Schema 物件無需同義詞,直接雙部件名稱即可。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved