Microsoft SQL Server:有一个自动递增列更新另一个表

时间:2012-10-17 00:32:29

标签: sql-server

我有orderID的订单表。我想在订单中创建新行时自动将其添加到orderID中的新行orderDetails。我让自动递增工作,但每当我尝试链接这两个,添加级联删除,它给我一个错误。

  

'订单'表已成功保存
  'orderDetail'表
   - 无法创建关系'FK_orderDetail_order'。
  无法在引用列“orderDetail.orderID”为标识列的位置创建级联外键“FK_orderDetail_order”。
  无法创建约束。查看以前的错误。

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

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

2 个答案:

答案 0 :(得分:0)

您希望AFTER INSERT表上有order触发器 - 在此,新提供的ID可用作NEW.orderID,现在可以轻松插入到orderDetails中。

只需通过命令行执行此操作即可。我当然这样做。

答案 1 :(得分:0)

您的问题是'orderDetail.orderID'不应该是标识列(自动递增)。它应该基于Order表中的orderId。你可以通过各种方式做到这一点。如果您正在使用存储过程,并对orderDetail记录单独调用数据库,请让代码先保存订单行,然后返回新创建的OrderId值,然后在调用中使用该值来保存orderdetails。如果您在一次调用中对保存订单头记录和所有订单明细记录的存储过程进行一次调用,则在存储的procd中插入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])