CREATE SYNONYM (Transact-SQL)
適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體
建立新的同義字。
Syntax
SQL Server 語法:
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
}
Azure SQL 資料庫 語法:
CREATE SYNONYM [ schema_name_1. ] synonym_name FOR <object>
<object> ::=
{
[ database_name. [ schema_name_2 ] . | schema_name_2. ] object_name
}
引數
schema_name_1
指定建立同義字的結構描述。 如果未 指定schema_name,SQL Server 會使用目前使用者的預設架構。
synonym_name
新同義字的名稱。
server_name
基底物件所在的伺服器名稱。
database_name
基底物件所在的資料庫名稱。 如果未 指定database_name ,則會使用目前資料庫的名稱。
schema_name_2
基底對象的架構名稱。 如果未 指定schema_name ,則會使用目前用戶的默認架構。
object_name
同義字所參考之基底對象的名稱。
注意
當database_name是目前資料庫,或 database_name 為 tempdb
且object_name開頭#
時,Azure SQL 資料庫 支援三部分名稱格式。database_name.[schema_name].object_name
備註
在建立同義字時,基底物件不需要存在。 SQL Server 會在執行階段檢查基底物件是否存在。
您可以建立下列物件類型的同義字:
- 組件 (CLR) 預存程序
- 組件 (CLR) 資料表值函式
- 組件 (CLR) 純量函數
- 組件 (CLR) 彙總函式
- 複寫篩選程序
- 擴充預存程式
- T-SQL 純量函式
- T-SQL 數據表值函式
- T-SQL 內嵌數據表值函式
- T-SQL 預存程式
- 資料表(使用者定義,包括本機和全域臨時表)
- 檢視
不支援函式基底物件的四部分名稱。
您可以在動態 T-SQL 中建立、卸除和參考同義字。
同義字是資料庫特定的,而且無法由其他數據庫存取。
權限
若要在指定的架構中建立同義字,用戶必須具有 CREATE SYNONYM
許可權並擁有架構或具有 ALTER SCHEMA 許可權。
許可權 CREATE SYNONYM
是可授與的許可權。
注意
您不需要基底對象的許可權才能成功編譯 CREATE SYNONYM
語句,因為基底物件上的所有許可權檢查都會延後到運行時間。
範例
A. 建立本機物件的同義字
下列範例會先建立 Product
資料庫中之基底物件 AdventureWorks2022
的同義字,再查詢這個同義字。
-- Create a synonym for the Product table in AdventureWorks2022.
CREATE SYNONYM MyProduct
FOR AdventureWorks2022.Production.Product;
GO
-- Query the Product table by using the synonym.
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 row(s) affected)
B. 建立遠端物件的同義字
在下列範例中,基底物件 Contact
在名稱為 Server_Remote
的遠端伺服器中。
EXEC sp_addlinkedserver Server_Remote;
GO
USE tempdb;
GO
CREATE SYNONYM MyEmployee FOR Server_Remote.AdventureWorks2022.HumanResources.Employee;
GO
C. 建立使用者定義函數的同義字
下列範例會建立名為 dbo.OrderDozen
的函數,以便將訂單數量增加為平均 12 單位。 然後,此範例會建立 dbo.CorrectOrder
函數的同義字 dbo.OrderDozen
。
-- 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;