我的发票存储在两个表格中,第一张表格中包含发票的一般信息,如发票编号,日期等等。第二个表格包含发票中购买的商品的详细信息,如商品名称,数量,等等...... 我想创建一个存储过程,首先插入发票的一般信息,然后遍历发票的项目,这些项目将在datagridview行中逐个插入发票明细表中。并在每个细节中插入数量库存中的项目已更新,这使我的存储过程处理3个SQL查询 我已经编写了一个存储过程但是我在自己的存储过程中编写循环语句的部分卡住了。任何人都可以帮忙!
Create proc [dbo].[AddNewSellDetails]
@invoiceNo int,
@invoice_date date,
@SELL_ID int,
@PRO_ID int,
@QUANTITY varchar(10),
@UNIT nvarchar(15),
@PRICE varchar(20),
@AMOUNT varchar(20),
@DISCOUNT varchar(20),
@FINAL_TOT varchar(30)
as
begin transaction
begin try
INSERT INTO Sell
(ID,sellDate) values (@invoiceNo,@invoice_date)
INSERT INTO Sell_Details
(Sell_ID
,Product_ID
,Quantity
,Unit
,Price
,Amount
,Discount
,Final_Tot)
VALUES
(@SELL_ID
,@PRO_ID
,@QUANTITY
,@UNIT
,@PRICE
,@AMOUNT
,@DISCOUNT
,@FINAL_TOT)
update Product set Product.Quantity = Product.Quantity - CONVERT(float,@QUANTITY)
where Product.Product_ID=@PRO_ID
commit transaction
end try
begin catch
rollback transaction
end catch
答案 0 :(得分:1)
您需要创建表值参数,如下所示
CREATE TYPE ProductDetails AS TABLE
(
ProductID INT,
QUANTITY VARCHAR(10),
UNIT NVARCHAR(15),
PRICE DECIMAL(18,2),
AMOUNT DECIMAL(18,2),
DISCOUNT DECIMAL(18,2),
FINAL_TOT INT
)
GO
然后创建如下的程序
CREATE PROCEDURE USP_AddNewSellDetails (@invoiceNo INT,@invoice_date DATE, @Produt_Detils ProductDetails READONLY)
AS
BEGIN
BEGIN TRANSACTION
INSERT INTO Sell
(ID,sellDate) values (@invoiceNo,@invoice_date)
INSERT INTO Sell_Details (Sell_ID ,Product_ID)
SELECT @invoiceNo, ProductID, QUANTITY ,UNIT ,PRICE ,AMOUNT ,DISCOUNT ,FINAL_TOT FROM @Produt_Detils
DECLARE ProductDetilsCursor CURSOR FOR
SELECT ProductID, QUANTITY FRM @Produt_Detils ORDER BY ProductID
OPEN ProductDetilsCursor
FETCH NEXT FROM ProductDetilsCursor into @ProductID,@QUANTITY
WHILE ( @@FETCH_STATUS = 0)
BEGIN
UPDATE Product set Product.Quantity = Product.Quantity - CONVERT(float,@QUANTITY)
WHERE Product.Product_ID=@ProductID
FETCH NEXT FROM ProductDetilsCursor into @ProductID,@QUANTITY
END
CLOSE ProductDetilsCursor
DEALLOCATE ProductDetilsCursor
COMMIT TRANSACTION
END
在运行程序之前准备表值参数,如下所示
DECLARE @PD ProductDetails;
INSERT @PD VALUES (1,2,'KG',100,200,25,1),(2,5,'PC',50,250,20,6)
然后执行如下的程序
EXEC USP_AddNewSellDetails 100,'2-Apr-2018',@PD