2016-03-30 6 views
0

を生成し、それがこのSQL文を理解できませんか?なぜそれが私が本をSQLを勉強エラー

Create procedure sp_ErrorHandling 
@SupplierID int, 
@ProductID int, 
@ProductName text 
AS 
Begin TRY 
Insert into tbls_products_sp(ProductID,SupplierID,ProductName) 
Values(@SupplierID,@ProductID,@ProductName) 
END TRY 
BEGIN CATCH 
Print 'Supplier does not exist' 
END CATCH 

exec sp_ErrorHandling @ProductID=73,@SupplierID=11,@ProductName='Chocolate' 

exec sp_ErrorHandling @ProductID=73,@SupplierID=11,@ProductName='Chocolate' 

それはエラーが発生します値11とは仕入先がないので、それは言うエラー処理のために次のコードを与えています。 また、値11でsupplierIDを使用すると、エラーは発生しません。

私の質問は、INSERTステートメントを使用しているときです。既存のテーブルに新しいレコードを入力するINSERTステートメントのポイントではありません。だから私は新しいレコードの値を与える場合、エラーの代わりにテーブルに追加するべきではありませんか?

+0

あなたは製品IDをサプライヤとサプライヤに製品 –

+0

に挿入しています。テーブルに外来キーが存在することが必要な制約があるようです。 – Hogan

答えて

1

私の推測では、この本はあなたに外部キー制約の概念を教えようとしているということです。

テーブルBにレコードを挿入し、テーブルAに外部キー値が存在しない場合、外部キーの制約により、SQL Serverによってエラーが発生します。

country_codesのテーブルと顧客のテーブルがあるとします。顧客にレコードを挿入するときにcountry_codesテーブルにcountrycode値が存在していなければならないという外部キー制約を定義します。

countrycodeの値がcountry_codesテーブルにない場合、新しい顧客レコードを作成すると、エラーが発生します。

+0

コードにエラーメッセージ行を追加しました。これは私がエラーメッセージを取得するものです: - PRIMARY KEY制約 'PK_tbls_Products_sp'の違反。オブジェクト 'dbo.tbls_Products_sp'に重複キーを挿入できません。重複キー値は(9)です。これは主キーの制約を示し、同じメッセージがsupplierID値として9と11の両方で表示されます。これを理解できるように助けてくれますか? –

関連する問題