共用方式為


CREATE SYNONYM (Transact-SQL)

建立新的同義字。

主題連結圖示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