2012-10-17 104 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中。

只需通過命令行執行此操作即可。我當然可以。

相關問題