我有兩個表Portfolio
和Trades
。插入投資組合數據後,使用該ID,我將交易詳細信息插入Trades
表中。在存儲過程中插入多個父子記錄到SQL Server 2008中
我會得到多個組合在一個單一的請求,例如,如果我得到兩個組合P1和P2,我需要爲每一個投資組合將兩個記錄到Portfolio
表,以及相應的交易細節到Trades
表一次。
如何在單個存儲過程調用中傳遞整個數據以維護事務?
我有兩個表Portfolio
和Trades
。插入投資組合數據後,使用該ID,我將交易詳細信息插入Trades
表中。在存儲過程中插入多個父子記錄到SQL Server 2008中
我會得到多個組合在一個單一的請求,例如,如果我得到兩個組合P1和P2,我需要爲每一個投資組合將兩個記錄到Portfolio
表,以及相應的交易細節到Trades
表一次。
如何在單個存儲過程調用中傳遞整個數據以維護事務?
從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值。
目前,我正在按照您提到的方式進行操作。我的要求是同時處理多個投資組合。我爲每個組合調用一次存儲過程。有沒有辦法在一次通話中通過所有投資組合。 –
如果您使用的是表值參數,您可以填寫您想要的行數......問題是什麼? –
如果我爲每個投資組合通過多個投資組合和多個交易,您將如何維持投資組合和交易表之間的表值參數之間的關係。希望我的問題很明確。 –
請添加詳細信息:表格,數據,預期結果以及迄今爲止所做的工作 –
組合表具有列ID,組合名稱,CreatedBy和CreatedOn,並且交易表具有列組合ID(參考組合表) ID),股票代碼,股票數量,行動。數據是P1,Vijay,2015年6月21日 –
投資組合表具有列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,買。目前,我將兩個數據表傳遞給存儲過程一個用於投資組合,一個用於交易,併爲每個投資組合調用存儲過程。 –