0

我有一张订单表orderID。我希望在订单中创建新行并自动将其添加orderIDorderDetails. 我让自动递增工作,但是每当我尝试将两者链接起来,添加级联删除时,它都会给我一个错误。

'order' 表已成功保存
'orderDetail' 表
- 无法创建关系 'FK_orderDetail_order'。
如果引用列“orderDetail.orderID”是标识列,则无法创建级联外键“FK_orderDetail_order”。
无法创建约束。请参阅以前的错误。

这似乎是因为没有orderIDat 行创建。如果没有这两个链接,就很难将订单与其信息联系起来。

我正在使用 Microsoft SQL 服务器 mgt studio。我是通过命令行 MySQL 学习的,而不是 SQL,所以这整个 GUI 东西让我失望(而且我有点生疏了)。

4

2 回答 2

0

您的问题是“orderDetail.orderID”不应该是标识列(自动递增)。它应该基于 Order 表中的 orderId。您可以通过多种方式做到这一点。如果您使用存储过程,并为 orderDetail 记录单独调用数据库,请让代码首先保存订单行,并返回新创建的 OrderId 值,然后在调用中使用该值来保存 orderdetails。如果您正在对存储过程进行一次调用,该存储过程在一次调用中保存了订单头记录和所有订单详细信息记录,那么在存储过程中,插入 ordfer 记录 forst,使用 Scope_identity() 将新创建的 orderId 提取到 T -SQL 变量,

  Declare @orderId Integer 
  Insert Orders([Order table columns]) 
  Values([Order table column values])
  Set @orderId = scope_Identity()

然后将 @orderId 中的值用于 OrderDetails 表中的所有插入...

  Insert OrderDetails(OrderId,  [Other OrderDetail table columns]) 
  Values(@orderId , [Other OrderDetail table column values])
于 2012-10-17T00:40:47.720 回答
0

您需要AFTER INSERT在表上触发order- 在此,新给定的 ID 可用NEW.orderID并且现在可以轻松插入到 orderDetails 中。

只需通过命令行执行此操作。我当然愿意。

于 2012-10-17T00:36:55.873 回答