Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# sql update语句与外键冲突_C#_Sql_Stored Procedures_Foreign Keys_Sql Update - Fatal编程技术网

C# sql update语句与外键冲突

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

我正在尝试使用以下存储过程更新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
当我执行该查询时,我得到以下错误:
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
时,是否在错误的列上设置了它?