订购表
OrderId
CustomerId
Date
Total
订单明细
OrderDetailId
OrderId
ProductId
Quantity
UnitPrice
我正在使用订单查询
INSERT INTO dbo.Orders (CustomerId, Date, Total)
VALUES (1, 2011-04-10, 50000);
我多次执行OrderDetail查询。
DECLARE @OrderID int
SET @OrderID = SCOPE_IDENTITY()
INSERT INTO dbo.OrderDetail (OrderId,ProductDescriptionId,Quantity,UnitPrice)
VALUES (@OrderID,11,2,50000)
这里的问题是@OrderID的值发生了变化,并且在我第二次执行此查询后不再匹配Orders表中的外键。那我该怎么做才能解决这个问题?
答案 0 :(得分:1)
I.
您必须使用 相同的连接 来:
插入订单:
INSERT INTO dbo.Orders (CustomerId, Date, Total)
VALUES (1, 2011-04-10, 50000);
检索SCOPE_IDENTITY()
并将其存储在代码中的某个位置(您没有提供.NET代码,因此我可以为您提供更精确的建议):
command.CommandText = "SELECT SCOPE_IDENTITY()";
int lastOrderId = (int)command.ExecuteScalar();
II.
然后(相同与否):
使用以下方法插入OrderDetails:
- 连接:
"INSERT INTO dbo.OrderDetail (OrderId,ProductDescriptionId,Quantity,UnitPrice)
VALUES ('" + lastOrderId.ToString() + "',11,2,50000)"
- 或Parameters:
command.Parameters.Add("@OrderID", SqlDbType.Int);
command.Parameters("@OrderID").Value = lastOrderId;
INSERT INTO dbo.OrderDetail (OrderId,ProductDescriptionId,Quantity,UnitPrice)
VALUES (@OrderID,11,2,50000)
答案 1 :(得分:1)
如果您的订单详细信息作为标识字段,那么当您调用INSERT INTO dbo.OrderDetail时,它将更改SCOPE_IDENTITY。您需要为每个订单条目设置一次或@OrderID,并且在您向Orders表中添加另一列之前不要再次调用SCOPE_IDENTITY。
--Run this once per order
INSERT INTO dbo.Orders (CustomerId, Date, Total)
VALUES (1, 2011-04-10, 50000);
--Run this once per order
DECLARE @OrderID int
SET @OrderID = SCOPE_IDENTITY()
--Run this once per orderdetail
INSERT INTO dbo.OrderDetail (OrderId,ProductDescriptionId,Quantity,UnitPrice)
VALUES (@OrderID,11,2,50000)