Sql-Server
如何為 SQL Server 中的列創建同義詞?
以下不起作用。我想在 SQL Server 2017 中的列上創建同義詞。我將如何執行此操作?
CREATE SYNONYM dbo.[ProductTest] for [dbo].[Product].[ProductId] GO select ProductTest from dbo.Product
如果您想保留表名但通過新名稱引用現有列,計算列將為您執行此操作。該列的計算值將只是現有列的值。
alter table [dbo].[Product] add [ProductTest] as ([ProductId]);
現在你可以寫
select [ProductId], [ProductTest] from [dbo].[Product];
兩列將始終具有相同的值。
如果您僅引用計算列,我的猜測是甚至不會有執行時成本。
您不能為列創建同義詞;同義詞是對錶和儲存過程等一流實體的簡單重定向。該文件列出了候選對像類型(並且列不在列表中):
可以為以下類型的對象創建同義詞:
CLR Stored Procedure CLR Table-valued Function CLR Scalar Function CLR Aggregate Functions Replication-filter-procedure Extended Stored Procedure Scalar Function Table-valued Function Inline-table-valued Function Stored Procedure View Table1
模擬一個同義詞,如果你不能改變表,你可以創建一個視圖,並強制使用者訪問視圖而不是表:
CREATE VIEW dbo.vProduct AS SELECT ProductTest = ProductID FROM dbo.Product;
或者通過儲存過程控制訪問:
CREATE PROCEDURE dbo.Product_Get AS BEGIN SET NOCOUNT ON; SELECT ProductTest = ProductID FROM dbo.Product; END GO
如果您已經有一個選擇原始列名的儲存過程,並且您希望有條件地返回別名而不是原始別名,有時,您可以使用
WITH RESULT SETS
. 缺點是您必須定義數據類型:CREATE PROCEDURE dbo.Product_Get_v2 AS BEGIN SET NOCOUNT ON; SELECT ProductID FROM dbo.Product; END GO EXEC dbo.Product_Get_v2; -- returns column ProductID EXEC dbo.Product_Get_v2 WITH RESULT SETS ((ProductTest int)); -- returns column ProductTest
如果您可以更改表並且它需要更加透明,您可以創建一個計算列,正如 Michael Green 建議的那樣。請注意,現在這兩列都將重新出現
SELECT *
,您必須更新目前引用舊名稱的所有儲存過程、視圖或應用程式碼。