Share via


跨資料庫使用使用者自訂類型

當您建立使用者自訂類型時,只有單一資料庫本身能使用它。因此,在一個資料庫中定義的使用者自訂類型,不能在其他資料庫的資料行定義中使用。不過,如果兩個資料庫中都已註冊同一個使用者自訂類型而可存取該類型,您就可以轉換其中一個資料庫中的使用者自訂類型值,以在另一個資料庫中使用。這項功能在執行下列動作時相當有用:

  • 呼叫在不同資料庫中定義的預存程序。

  • 查詢在兩個不同資料庫中定義的資料表。

  • 選取某個資料庫的資料,再插入另一個資料庫中。

例如,假設資料庫 db1 和資料庫 db2 中都建立了使用者自訂類型 u1。只有資料庫 db2 中建立預存程序 p2,而這個程序使用類型 u1 的參數。您可以使用類型 u1 的執行個體,從資料庫 db1 呼叫程序 p2。

USE db1
DECLARE @u u1
EXEC db2.dbo.p2 @u
GO

另一個範例是使用查詢的結果擴展 tempdb 中的暫存資料表。使用者自訂類型必須在 tempdb 中註冊,這項作業才能成功。

INSERT INTO #t SELECT * FROM T 

當您在資料表變數中使用使用者自訂類型,或當資料指標在工作資料表中使用使用者自訂類型時,tempdb 中不需要註冊該使用者自訂類型。

當您跨資料庫使用使用者自訂類型時,請謹記下列事項:

  • 類型的名稱必須相同,包括 CLR 名稱要相同,而且必須同時在兩個資料庫中透過相同的組件實作。如果兩個資料庫中的組件具有相同的名稱、強式名稱、文化特性、版本、程式碼存取權限集和二進位內容,那麼這兩個組件就是相同的。

  • 您必須具備查詢中所參考的每個使用者自訂類型資料行的 SELECT 和 EXECUTE 權限。這些權限是根據每個資料行定義所在的資料庫檢查。

  • 如果在一個組件中實作的類型呼叫另一個組件中的方法,檢查這個跨組件呼叫的方式,與檢查非跨資料庫發出的使用者自訂類型查詢相同。