2012-10-17 103 views
0

我有一个订单表orderID。我希望当我在订单中创建一个新行时,并自动将它添加到orderDetails中的一个新行中相同的orderID。我得到了自动递增工作,但是无论何时我尝试链接两个,添加级联删除,它给了我一个错误。Microsoft SQL服务器:有一个自动递增列更新另一个表

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

这似乎是因为在创建行时没有orderID。没有这两个链接,很难将订单链接到其信息。

我正在使用Microsoft SQL server mgt studio。我通过命令行学习了MySQL,而不是SQL,因此整个GUI的东西都把我扔掉了(而且我有点生疏)。

回答

0

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

你想在order表上触发一个AFTER INSERT--在这个例子中,新给定的ID可用作NEW.orderID,现在可以很容易地插入到orderDetails中。

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

相关问题