在存储过程中插入多个父子记录到SQL Server 2008中
我有两个表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,买。目前,我将两个数据表传递给存储过程一个用于投资组合,一个用于交易,并为每个投资组合调用存储过程。 –