与两个表中的多个插入冲突

时间:2018-02-27 12:47:13

标签: sql-server stored-procedures bulkinsert

我正在尝试将cart userId=1表的所有行插入OrderOrderItem表,Order表包含以下列:

订购表

1.OrderId(int)

2.OrderDate(日期时间)

3.userId(int)

4.orderStatus(varchar)

user_tbl表引用了带有userId和PK的Order表  cart表也是userId

的引用

CART TABLE

Id

用户id

数量

的productID

ORDERITEM TABLE

ID

订单ID

的productid

数量

ITEM表

产品编号

名称

SizeId

ColorId

价格

IMAGEURL

我试过以下但这给了我冲突错误:

  

INSERT语句与FOREIGN KEY约束冲突" FK_OrderItem_Item"。冲突发生在数据库" db",table" dbo.Item",column' Id'

insert into [Order] values(getdate(),@userId,@status);
set @orderId = @@IDENTITY
insert into OrderItem (OrderId ,ItemID,Qty,ColorId,SizeId)
select @orderId,Cart.ProductId,cart.Quantity,cart.ColorId,cart.SizeId 
from [Cart] 
where UserId=@userId ;

1 个答案:

答案 0 :(得分:0)

将您的查询更改为

INSERT INTO [Order]
VALUES
(
    GETDATE(),
    @userId,
    @status
);

SELECT @orderId = SCOPE_IDENTITY();--Use SCOPE_IDENTITY Instead of @@IDENTITY

INSERT INTO OrderItem
(
    OrderId,
    ItemID,
    Qty,
    ColorId,
    SizeId
)
       SELECT [Order].OrderId,
              Cart.ProductId,
              cart.Quantity,
              cart.ColorId,
              cart.SizeId
       FROM [Cart] 
       INNER JOIN [Order]
       ON [Cart].UserId = @userId
          AND [Order].OrderId = @orderId;--SELECT Order Id From Order to be more safer