【发布时间】:2018-11-11 06:31:08
【问题描述】:
我需要了解 SQL 的人的帮助,因为这超出了我的 SQL 技能范围。那是我的桌子:
CREATE TABLE [dbo].[Orders]
(
id INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
customerName VARCHAR(30) NOT NULL,
customerAddress VARCHAR(30) NOT NULL,
submitDate DATE NOT NULL,
realizationDate DATE,
deliveryTypeId INT NOT NULL
FOREIGN KEY(deliveryTypeId) REFERENCES deliveryTypes(id)
);
CREATE TABLE [dbo].[OrderItems]
(
id INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
orderId INT NOT NULL,
productId INT NOT NULL,
productQuantity INT,
FOREIGN KEY(orderId) REFERENCES Orders(id),
FOREIGN KEY(productId) REFERENCES Products(id)
);
我需要创建一个存储过程,将一对多相关记录插入到数据库中的两个表中(事实上,这确实是多对多绑定的一部分,但我只需要添加到这两个表中)。在我的应用程序(.NET)中,我需要传递一条记录“Orders”和一条或多条记录“OrderItems”。
我的问题是:
- 如果我插入“订单”,我将不知道在
OrderItems -> orderId中设置什么值。我找到了SCOPE_IDENTITY函数,但我真的不知道如何在我的情况下使用它。 - 如果我不知道表中有多少条
OrderItems记录,如何插入?我只知道可以有一个或多个。 - 我不知道如何调用从应用程序级别接收许多
OrderItems的过程以及我应该在存储过程中声明哪些参数
我非常感谢所有帮助,因为我面临这个问题几个小时,我真的不知道该怎么做。
编辑:这是我到目前为止提出的代码:
CREATE PROCEDURE spAddOrder
(@customerName VARCHAR(30),
@customerAddress VARCHAR(30),
@submitDate DATE,
@deliveryTypeId INT
-- I don't know how to pass many OrderItems rows as argument
)
AS
BEGIN
INSERT INTO Orders(customerName, customerAddress, submitDate, deliveryTypeId)
VALUES (@customerName, @customerAddress, @submitDate, @deliveryTypeId)
SELECT SCOPE_IDENTITY() AS orderId
-- I don't know how to do it for unknown number of rows
INSERT INTO OrderItems(orderId, productId, productQuantity)
VALUES (@orderId, @productId, @productQuantity)
END;
GO
【问题讨论】:
-
我建议您也可以在dba.stackexchange.com 中提问
-
@BarrJ 谢谢你的建议,我会做的
-
如果你能在minimal reproducible example 上分享你目前的进展,那就太棒了。
-
@mjwills 我刚刚编辑了我的问题,感谢您在下面的回答。
标签: c# sql stored-procedures one-to-many sql-server-2017