sql update语句与外键冲突

时间:2013-07-01 10:43:30

标签: c# sql stored-procedures foreign-keys sql-update

我正在尝试使用此存储过程更新sql表:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO

CREATE PROCEDURE [dbo].[UpdatePostingStatusAngel]
     @PostingStatusID tinyint,
     @PostingID int
AS
UPDATE dbo.Posting
SET
    PostingStatusID = @PostingStatusID
WHERE PostingID = @PostingID

当我执行该查询时,我收到此错误:The UPDATE statement conflicted with the FOREIGN KEY constraint "FK_Posting_PaymentStatus". The conflict occurred in database "JobsDB2008", table "dbo.PaymentStatus", column 'PaymentStatusID'.

这真的很奇怪,因为我没有更新'PaymentStatusID'列,我不知道为什么它会让我在该列上发生冲突。该列也设置为NULL并且它已经有值。 我试图只更新PostingStatusID字段。 任何想法可能是什么原因? 在此先感谢Laziale

2 个答案:

答案 0 :(得分:0)

PaymentStatusId列中存储的值不得存在于PaymentStatus表中。

确保PostingStatusIdPaymentStatusId是有效的ID,并存在于相应的表格中。

SELECT PaymentStatusId, PostingStatusId 
FROM Posting
WHERE PostingId = @PostingId

答案 1 :(得分:0)

我建议运行以下命令:

SELECT *
FROM   dbo.Posting
WHERE  PaymentStatusId
NOT IN (
    SELECT PaymentStatusId
    FROM dbo.PaymentStatus
)

您在Posting表中可能包含错误的数据,这些数据在此处被标记。它是如何进入的......我猜想在填充数据后创建或重新创建了约束,并禁用了WITH CHECK选项。