我有2张桌子
payment
( payment_id ,其他成本,GarageCosts)spareparts
(payment_id,sparepartId,sparePartQty)在payment
表payment_id
中自动生成。除了otherCosts
和garagecosts
值之外,在我的C#asp.net应用程序中还有一个带
{ sparepartId : 'Somevalue', sparePartQty : 'somevalue' }
我需要做的是在存储过程中首先将记录输入到支付表中,其中包含车库成本和其他成本值。然后返回最后生成的付款ID,并将其作为spareParts
表输入数组中的每个值对。{/ p>
实现这一目标的方法是什么?请帮忙。
答案 0 :(得分:0)
要解决您的问题,请尝试此
首先使用payment
和otherCosts
在GarageCosts
表中插入您的数据。
然后创建一个过程以从payment_id
表
payment
create procedure select_last_payment_id
as
begin
select top 1 payment_id
from payment
order by payment_id desc
end
最后通过运行存储过程并将其分配到payment_id
payment_id
表并存储spareparts
数据来获取spareparts
。
希望它适合你。
答案 1 :(得分:0)
根据你的标签,我假设我们正在谈论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,但请务必阅读@@IDENTITY和SCOPE_IDENTITY,并了解与第一个相关的风险。
如果你需要有两个单独的sprocs,你也可以这样做,这是第一个sproc的样子。请注意,@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#代码中传递它们,请参阅Table Value Parameters in SQL Server 2008 and .NET (C#)或Table-Valued Parameters。
您也可以将TVP用于只有一个sproc的解决方案。