insert语句与Foreign Key SQL冲突

时间:2017-07-04 17:17:59

标签: sql sql-server sql-server-2016 insert-update

我搜索了互联网,但找不到解决方案。我使用以下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.

我知道这意味着什么。首先,没有像其他人那样提及列中的问题。其次,表PRCRDATA具有PRCRULE,SODTYPE,SOTYPE等所需的所有值。

我应该在哪里看?

2 个答案:

答案 0 :(得分:1)

很抱歉,但我还无法发表评论,所以我需要发布一个"答案"。我建议:

  • 通过检查找出FK违规出现的列 dbo.PRCRDATA的源代码和列的内容 XD_PRCRDATALNS_PRCRULE约束。
    • 完成后你现在应该能够看到它的价值 INSERT语句中的违规值。

请告诉我们它是怎么回事。

尼尔斯

答案 1 :(得分:0)

我缩小了范围。来自SQL Server的消息不正确! 这不是PRCRULE的问题。问题是FROMDATE也是FK,我将其从GETDATE ()更改为CONVERT(DATE, GETDATE()),因此我删除了时间,并且有效。