CREATE SYNONYM (Transact-SQL)
建立新的同義字。
語法
CREATE SYNONYM [ schema_name_1. ] synonym_name FOR <object>
<object> :: =
{
[ server_name.[ database_name ] . [ schema_name_2 ].| database_name . [ schema_name_2 ].| schema_name_2. ] object_name
}
引數
schema_name_1
指定建立同義字的結構描述。如果未指定 schema,SQL Server 會使用目前使用者的預設結構描述。synonym_name
這是新同義字的名稱。server_name
這是基底物件所在的伺服器名稱。database_name
這是基底物件所在的資料庫名稱。如果未指定 database_name,就會使用目前資料庫的名稱。schema_name_2
這是基底物件的結構描述名稱。如果未指定 schema_name,就會使用目前使用者的預設結構描述。object_name
這是同義字參考的基底物件名稱。
備註
在建立同義字時,基底物件不需要存在。在執行階段,SQL Server 會檢查基底物件是否存在。
您可以建立下列物件類型的同義字:
組件 (CLR) 預存程序 |
組件 (CLR) 資料表值函式 |
組件 (CLR) 純量函數 |
組件彙總 (CLR) 彙總函式 |
複寫篩選程序 |
擴充預存程序 |
SQL 純量函數 |
SQL 資料表值函式 |
SQL 嵌入資料表值函式 |
SQL 預存程序 |
檢視表 |
資料表1 (使用者定義) |
1 包括本機和全域暫存資料表
不支援函數基底物件的四部分名稱。
動態 SQL 中的同義字可以建立、卸除和參考。
權限
若要以給定結構描述建立同義字,使用者必須擁有 CREATE SYNONYM 權限,並擁有該結構描述或 ALTER SCHEMA 權限。
CREATE SYNONYM 權限是可授與的權限。
[!附註]
您不需要基底物件的權限,便能夠成功編譯 CREATE SYNONYM 陳述式,因為基底物件的所有權限檢查都會延遲到執行階段。
範例
A. 建立本機物件的同義字
下列範例先建立 AdventureWorks2008R2 資料庫中之基底物件 Product 的同義字,再查詢這個同義字。
USE tempdb;
GO
-- Create a synonym for the Product table in AdventureWorks2008R2.
CREATE SYNONYM MyProduct
FOR AdventureWorks2008R2.Production.Product;
GO
-- Query the Product table by using the synonym.
USE tempdb;
GO
SELECT ProductID, Name
FROM MyProduct
WHERE ProductID < 5;
GO
以下為結果集:
-----------------------
ProductID Name
----------- --------------------------
1 Adjustable Race
2 Bearing Ball
3 BB Ball Bearing
4 Headset Ball Bearings
(4 個資料列受到影響)
B. 建立遠端物件的同義字
在下列範例中,基底物件 Contact 在名稱為 Server_Remote 的遠端伺服器中。
EXEC sp_addlinkedserver Server_Remote;
GO
USE tempdb;
GO
CREATE SYNONYM MyEmployee FOR Server_Remote.AdventureWorks2008R2.HumanResources.Employee;
GO
C. 建立使用者定義函數的同義字
下列範例會建立名為 dbo.OrderDozen 的函數,以便將訂單數量增加為平均一打的單位。然後,此範例會建立 dbo.OrderDozen 函數的同義字 dbo.CorrectOrder。
-- Creating the dbo.OrderDozen function
CREATE FUNCTION dbo.OrderDozen (@OrderAmt int)
RETURNS int
WITH EXECUTE AS CALLER
AS
BEGIN
IF @OrderAmt % 12 <> 0
BEGIN
SET @OrderAmt += 12 - (@OrderAmt % 12)
END
RETURN(@OrderAmt);
END;
GO
-- Using the dbo.OrderDozen function
DECLARE @Amt int
SET @Amt = 15
SELECT @Amt AS OriginalOrder, dbo.OrderDozen(@Amt) AS ModifiedOrder
-- Create a synonym dbo.CorrectOrder for the dbo.OrderDozen function.
CREATE SYNONYM dbo.CorrectOrder
FOR dbo.OrderDozen;
GO
-- Using the dbo.CorrectOrder synonym.
DECLARE @Amt int
SET @Amt = 15
SELECT @Amt AS OriginalOrder, dbo.CorrectOrder(@Amt) AS ModifiedOrder