在SQL Server 2008中運用表值參數(TVP)(3)_Mssql數據庫教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦: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命令來獲得你希望對其執行代理鍵查找功能的源系統鍵的列表。

        返回結果顯示了每一個源鍵的代理鍵。