0

の注文表がありますorderIDorderID注文で新しい行を作成し、それをで新しい行に自動的に追加するときに必要ですorderDetails。自動インクリメントが機能するようになりましたが、カスケード削除を追加して2つをリンクしようとすると、エラーが発生します。

'order'テーブルが正常に保存されました
'orderDetail'テーブル
-リレーションシップ'FK_orderDetail_order'を作成できません。
参照列'orderDetail.orderID'がID列である場合、カスケード外部キー'FK_orderDetail_order'は作成できません。
制約を作成できませんでした。以前のエラーを参照してください。

orderIDこれは、行の作成がないためと思われます。これら2つがリンクされていないと、注文をその情報にリンクするのはかなり困難です。

MicrosoftSQLサーバーのmgtスタジオを使用しています。私はSQLではなくコマンドラインのMySQLを介して学んだので、このGUI全体が私を失望させています(そして私は少しさびています)。

4

2 に答える 2

0

AFTER INSERTテーブルにトリガーが必要ですorder。この場合、新しく指定されたIDはとして使用可能であり、NEW.orderIDorderDetailsに簡単に挿入できるようになりました。

コマンドラインからこれを行うだけです。私は確かにそうします。

于 2012-10-17T00:36:55.873 に答える
0

あなたの問題は、'orderDetail.orderID'がID列(自動インクリメント)であってはならないということです。OrderテーブルのorderIdに基づいている必要があります。さまざまな方法でそれを行うことができます。ストアドプロシージャを使用していて、orderDetailレコードのデータベースを個別に呼び出す場合は、コードで最初に注文行を保存し、新しく作成されたOrderId値を返し、その値を呼び出しで使用してorderdetailsを保存します。オーダーヘッダーレコードとすべてのオーダー詳細レコードを1回の呼び出しで保存するストアドプロシージャを1回呼び出す場合は、ストアドプロシージャで、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])
于 2012-10-17T00:40:47.720 に答える