繁体   English   中英

在存储过程中将多个父子记录插入SQL Server 2008中

[英]Insert multiple parent child records into SQL Server 2008 in a stored procedure

我有两个表PortfolioTrades 使用该ID插入投资组合数据后,我将交易详细信息插入到Trades表中。

我将在一个请求中获得多个投资组合,例如,如果获得两个投资组合P1和P2,则需要在Portfolio表中插入两个记录,并且每个投资组合一次将对应的交易明细插入到Trades表中。

如何在单个存储过程调用中传递全部数据以维护事务?

从sql server 2008开始,可以使用表值参数 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::表值参数为只读。 这意味着您不能在其上使用update,insert或delete语句。 但是,您可以在存储过程中声明表值变量,然后在该过程中使用插入,更新和删除。

注意#2:如果您的投资组合ID是一个标识列,那么在将数据插入投资组合表时,您将需要使用output子句来获取新的ID值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM