在SQL Server 2008中運用表值參數(TVP)(3)_Mssql數據庫教程
推薦:SQL Server數據庫增強版備份體驗老鳥說事:Microsoft SQL Server數據庫增強版備份體驗 在歐洲,有一首流傳很廣的民諺: 因為丟失一根鐵釘,我們失去了一塊馬蹄鐵; 因為失去一塊馬蹄鐵,我們失去了一匹駿馬; 因為失去
現在我們來創建一個接受新建表類型作為參數并執行代理鍵查找和推理處理的存儲過程:
以下為引用的內容:
CREATEPROCEDUREdbo.stp_GetCustomerSK
@source_key_listSourceKeyListREADONLY
AS
BEGIN
INSERTINTOdbo.dim_Customer(
CustomerSourceKey,CustomerName,InferredMember
)
SELECTSourceKey,N'INFERRED',1
FROM@source_key_listk
LEFTJOINdbo.dim_CustomercONc.CustomerSourceKey=k.SourceKey
WHEREsk_CustomerISNULL
SELECTsk_Customer,CustomerSourceKey
FROMdbo.dim_Customerc
JOIN@source_key_listkONk.SourceKey=c.CustomerSourceKey
END
GO
表值參數必須被聲明為READONLY。你不能對表值參數執行任何DML(即插入、更新、刪除)。你職能在SELECT語句里引用它。存儲過程把表值參數與客戶維度連接起來,查找出任何還不存在的源鍵,然后插入這些鍵。然后存儲過程再把表值參數與客戶維度連接來返回含有源鍵及其對應代理鍵的結果集。
你可以通過查詢sys.parameters來查看任何被聲明為READONLY的參數:
以下是引用片段:
以下為引用的內容:
SELECTobject_id,nameFROMsys.parameters
WHEREis_readonly=1
GO
聲明表值參數,導入數據,并把它傳遞到存儲過程里
你聲明一個表類型的T-SQL變量,使用INSERT插入語句向該表導入數據:
以下為引用的內容:
DECLARE@source_key_listSourceKeyList
INSERTINTO@source_key_list
SELECT'CustomerID_001'UNIONALL
SELECT'CustomerID_002'UNIONALL
SELECT'CustomerID_003'
EXECdbo.stp_GetCustomerSK@source_key_list
GO
為了演示的目的,上面的SELECt語句只是硬編碼一些值來插入;你通常可以從你的源系統表里執行SELECT DISTINCT命令來獲得你希望對其執行代理鍵查找功能的源系統鍵的列表。
返回結果顯示了每一個源鍵的代理鍵。