C# sql update语句与外键冲突
我正在尝试使用以下存储过程更新sql表:C# sql update语句与外键冲突,c#,sql,stored-procedures,foreign-keys,sql-update,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 Postin
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
当我执行该查询时,我得到以下错误:UPDATE语句与外键约束“FK_Posting_PaymentStatus”冲突。冲突发生在数据库“JobsDB2008”、表“dbo.PaymentStatus”、列“PaymentStatusID”中。
这真的很奇怪,因为我没有更新“PaymentStatusID”列,我不知道为什么会在该列上出现冲突。该列也被设置为NULL,并且已经有值。
我正在尝试仅更新PostingStatusID字段。
你知道原因是什么吗?
提前感谢,Laziale存储在
PaymentStatusId
列中的值不能存在于PaymentStatus
表中
确保PostingStatusId
,PaymentStatusId
是有效的id,并且存在于相应的表中
SELECT PaymentStatusId, PostingStatusId
FROM Posting
WHERE PostingId = @PostingId
我建议运行以下命令:
SELECT *
FROM dbo.Posting
WHERE PaymentStatusId
NOT IN (
SELECT PaymentStatusId
FROM dbo.PaymentStatus
)
您可能在此处标记的过帐表中有错误数据。它是如何进入的…我猜约束是在填充数据后创建或重新创建的,并且禁用了WITH CHECK选项。您可以编辑您的帖子并包含两个表定义吗?假设您的外键实际上定义正确,并且引用的是
PaymentStatusId
而不是PostingStatusId
,那么在某个时候,外键可能被禁用,而没有WITH重新启用选中
选项。这将在表中留下无效数据。谢谢,但我不会尝试更新paymentstatusID字段,只更新postingstatusid。为什么我还需要包括该字段?@Laziale-我知道您没有试图更新该字段。我包含了SELECT,以便您可以测试PaymentStatusId
和PostingStatusId
是否有效(即它们存在于另一个表中)因此外键约束可以通过。@Laziale-PaymentStatus表是否包含ID为2的条目?@Laziale-因此,在将外键设置为PaymentStatus
时,是否在错误的列上设置了它?