2017-07-04 5 views
0

インターネットを検索しましたが、解決策が見つかりませんでした。私はいくつかのセルを更新したり、新しい行を作成するために、次のSQLステートメントを使用しています:私はそれを実行するとinsertステートメントが外部キーと競合しましたSQL

UPDATE [dbo].[PRCRDATALNS] 

SET FLD01 = :TIMX1 
    ,FLD02 = :TIML1 

WHERE DIM1= :vmtrl AND PRCRULE= '2' AND LINENUM = '1' 

IF @@ROWCOUNT=0 

INSERT INTO [dbo].[PRCRDATALNS] (

     COMPANY 
     ,SODTYPE  
     ,SOTYPE 
     ,PRCRULE 
     ,DIM1 
     ,DIM2 
     ,DIM3 
     ,PRCRDATALNS 
     ,LINENUM 
     ,FROMDATE 
     ,FLD01 
     ,FLD02 
     ,SCALEQTY 
    ) 

VALUES 
     ('1' 
     ,'13' 
     ,'1' 
     ,2 
     ,:vmtrl 
     ,'0' 
     ,'0' 
     ,'1' 
     ,'1' 
     ,GETDATE () 
     ,:TIMX1 
     ,:TIML1 
     ,'1' 
     ); 

をして、新しい行が挿入されることは言う:The insert statement conflicted with the FOREIGN KEY constraint "XD_PRCRDATALNS_PRCRULE". The conflict occurred in database "KOMBOS", table "dbo.PRCRDATA". The statement has been terminated.

私が知っこれはどういう意味ですか?まず第一に、他のコラムの問題については何も言及されていません。第2に、テーブルPRCRDATAにはPRCRULE、SODTYPE、SOTYPEなど必要なすべての値があります。

どこを見てください。

+0

まずこのキーのレコードを "dbo.PRCRDATA"に追加してみてください –

+0

このキーはどういう意味ですか?私は問題なしでdbo.PRCRDATAに行を挿入することができます –

答えて

0

私はそれを絞りました。 SQL Serverからのメッセージは正しくありませんでした。 問題はPRCRULEではありませんでした。問題はFKでもあったFROMDATEでした。GETDATE()からCONVERT(DATE, GETDATE())に変更しましたので、時間を取り除きました。

1

申し訳ありませんが、まだコメントできませんので、「回答」を投稿する必要があります。私がお勧めします:

  • はFK違反が dbo.PRCRDATAのソースを確認することで、に対して表示され、どの列が XD_PRCRDATALNS_PRCRULE制約を持っているものの列を見つけます。
    • これで、 の値がINSERTステートメントにどのような値であるかを確認できるはずです。

どうすればいいのか教えてください。

Niels

+0

私はSQL Serverを初めて使用しているので詳細を教えてください。私はフォルダの '列'のdbo.PRCDATAの横に十字を押しました。私はFKがCOMPANY、SODTYPE、SOTYPE、PRCRULEであることがわかりました。フォルダ 'Constraints'にDF_PRCDATA_DIM1、DF_PRCDATA_DIM2、DF_PRCDATA_DIM3、DF_PRCDATA_LOCKIDがあります。これらすべての情報は、テーブルPRCDATAに空のセルがないので、何も教えてくれません。 –

+0

外部キーが何であるかの定義を見てください(https://en.wikipedia.org)。/wiki/Foreign_key)。つまり、[dbo]。[PRCRDATALNS]に挿入しようとするデータの中には、dbo.PRCRDATAに対応する値がないことを前提としています。 FKの定義を見て、どのような価値があるのか​​を知ることができ、彼らが指している列を見ることができます。 –

関連する問題