Go语言 有效值上的外键约束冲突[已关闭]

xa9qqrwz  于 2023-04-18  发布在  Go
关注(0)|答案(2)|浏览(131)

**已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。

这个问题是由一个错字或一个无法再复制的问题引起的。虽然类似的问题可能是on-topic在这里,但这个问题的解决方式不太可能帮助未来的读者。
10小时前关闭。
Improve this question
我正在使用Go将行插入到SQL Server数据库的表中。尝试将行插入到表中时出现以下错误。"The INSERT statement conflicted with the FOREIGN KEY constraint \"FK_MessageStream_Message\". The conflict occurred in database \"Alerting\", table \"t_pipe.Message\", column 'MessageID'."
我使用SQL Server Management Studio来显示约束:

USE [Alerting]
GO

ALTER TABLE [t_pipe].[MessageStream]  WITH CHECK ADD  CONSTRAINT [FK_MessageStream_Message] FOREIGN KEY([MessageID])
REFERENCES [t_pipe].[Message] ([MessageID])
ON DELETE CASCADE
GO

我还验证了在抛出此错误时表中存在MessageID。在尝试插入此值之前不久,将消息及其关联ID插入到表中。
使用VS Code调试器,我能够显示我试图插入的Stream对象的值。

下面您可以看到MessageID确实存在于它所抱怨的表中。

任何帮助都很感激。

k10s72fa

k10s72fa1#

我发现这个问题是一个坏的变量名在执行插入的一面。

tkclm6bt

tkclm6bt2#

在这种情况下,我将尝试指出两件事:
检查“MessageStream”表上是否存在可能导致此问题的任何触发器或约束。您可以通过在“sys.triggers”或“sys.check_constraints”系统表上运行SELECT语句来执行此操作。
最重要的是检查是否有任何可能干扰插入操作的事务。如果您正在使用事务,请确保在尝试将“MessageID”值插入到“MessageStream”表之前将其提交到数据库。
您可以调试该问题,并在插入操作之前暂停,然后从management studio查询数据库,以确定父表中是否存在该记录。请不要使用WITH (NOLOCK)提示。

相关问题