[asp.net]将对象数组传递给 SQL 存储过程

发布时间: 2017/3/26 2:40:26
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有 2 表

  • payment(payment_id,otherCosts,GarageCosts)
  • spareparts(payment_id,sparepartId,sparePartQty)

paymentpayment_id 是自动生成。除了从 otherCostsgaragecosts 我 C# asp.net 应用程序还有一个与对象的数组中的值

{ sparepartId : 'Somevalue', sparePartQty : 'somevalue' }

需要做些什么是存储过程中首先输入该记录到付款表与车库成本和其他成本值。然后返回上一个生成的付款 ID 并将其输入到 spareParts 表作为 paymentId 为每个数组中的值对。

实现这一目标的方法是什么?请帮助。

解决方法 1:

基于您的标签我要去假设我们正在谈论 SQL Server / T SQL。
你可以做这一切都是一个存储过程︰

CREATE PROCEDURE dbo.Foo ... /* input parameters */
AS
BEGIN
    DECLARE @PaymentId int

    INSERT INTO payment(otherCosts, GarageCosts) VALUES (...)
    SET @PaymentId = SCOPE_IDENTITY()
    INSERT INTO spareparts(payment_id, sparepartId, sparePartQty) VALUES(@PaymentId, ...) 

END
GO

你可能想要也看着 @@IDENTITY,但请确保你阅读关于@@IDENTITYSCOPE_IDENTITY ,并了解与第一个相关的风险。

如果你需要有两个单独的存储过程你可以做太,在这里是如何第一存储过程会看起来像。请注意, @PaymentId 是输出参数,这意味着调用方可以检索它并将它传递给第二个过程。

CREATE PROCEDURE dbo.Foo 
    /* input parameters */
    @PaymentId int OUT
AS
BEGIN
    INSERT INTO payment(otherCosts, GarageCosts) VALUES (...)
    SET @PaymentId = SCOPE_IDENTITY()
END
GO

编辑-后澄清了问题的范围︰

如果你需要调用第二个存储的过程,它传递的参数数组,使用 SQL Server 2008 版本或您可以使用 TVP (表值参数)。要查看如何使用他们在存储的过程和如何您可以传递它们从 C# 代码请参见表值参数在 SQL Server 2008 和.NET (C#)依次参数
您还可以使用许可证与解决方案,你只需要一个存储过程。

赞助商