2015-06-21 101 views
-1

我有兩個表PortfolioTrades。插入投資組合數據後,使用該ID,我將交易詳細信息插入Trades表中。在存儲過程中插入多個父子記錄到SQL Server 2008中

我會得到多個組合在一個單一的請求,例如,如果我得到兩個組合P1和P2,我需要爲每一個投資組合將兩個記錄到Portfolio表,以及相應的交易細節到Trades表一次。

如何在單個存儲過程調用中傳遞整個數據以維護事務?

+2

請添加詳細信息:表格,數據,預期結果以及迄今爲止所做的工作 –

+0

組合表具有列ID,組合名稱,CreatedBy和CreatedOn,並且交易表具有列組合ID(參考組合表) ID),股票代碼,股票數量,行動。數據是P1,Vijay,2015年6月21日 –

+0

投資組合表具有列ID,投資組合名稱,CreatedBy和CreatedOn,並且交易表具有列投資組合ID(從投資組合表ID引用),股票代碼,股數,行動。投資組合記錄1:Vijay,2015年6月21日交易記錄1:1,MSFT,50,買入\t; 1,IBM,75,賣。投資組合記錄2:P2,Suresh,2015年6月21日交易記錄2:2,YAHOO,30,更新; 2,Goog,40,買。目前,我將兩個數據表傳遞給存儲過程一個用於投資組合,一個用於交易,併爲每個投資組合調用存儲過程。 –

回答

2

從sql server 2008開始,您可以使用table valued parameter s將單個調用中的表結構化數據傳遞給存儲過程。
但是,並不是每個客戶端都支持這一點。例如,使用.Net很容易,但是我懷疑VBScript是可行的。

爲了使用一個表值參數,你必須首先創建一個用戶定義的表類型:

CREATE TYPE UDT_Portfolio As Table 
(
    Portfolio_Id int, 
    Portfolio_Name varchar(10), 
    ..... 
) 
你的情況

,因爲你想通過2個表,就需要2種類型:

CREATE TYPE UDT_Trades As Table 
(
    Trade_Id int, 
    Trade_Portfolio_Id int, 
    Trade_Name varchar(10), 
    .... 
) 

現在,在存儲過程中使用起來非常簡單:

CREATE PROCEDURE stp_InsertPortfoliosAndTrades 
(
    @Portfolio UDT_Portfolio readonly, -- Note: Readonly is a must 
    @Trade UDT_Trades readonly 
) 
AS 

-- stored procedure logic here 

注#1::表值參數是隻讀的。這意味着你不能在它們上使用更新,插入或刪除語句。 但是,您可以在存儲過程內聲明值爲的變量,並在其上使用插入,更新和刪除。

注2:如果你的投資組合ID是標識列,然後將數據插入到表中的投資組合時,您將需要使用output子句,以獲得新的ID值。

+0

目前,我正在按照您提到的方式進行操作。我的要求是同時處理多個投資組合。我爲每個組合調用一次存儲過程。有沒有辦法在一次通話中通過所有投資組合。 –

+0

如果您使用的是表值參數,您可以填寫您想要的行數......問題是什麼? –

+0

如果我爲每個投資組合通過多個投資組合和多個交易,您將如何維持投資組合和交易表之間的表值參數之間的關係。希望我的問題很明確。 –

相關問題