gpt4 book ai didi

sql - 合并引发外键冲突

转载 作者:行者123 更新时间:2023-12-03 01:53:57 24 4
gpt4 key购买 nike

这是我的 SQL 语句的一部分:

MERGE INTO Scyk.dbo.Threads AS d
USING (SELECT Id,Question,QuestionTitle, Answer, Category FROM Homework.dbo.Zadanes) AS s
ON 1 = 2
WHEN NOT MATCHED THEN
INSERT (CurrentValue, NumberOfPosts, TotalValue, Views, Title, DateCreated, LastPostAuthor, LastPostDateTime, IsDeleted, Restricted, RestrictWrite, Sticked, CategoryName, AuthorUserName)
VALUES (0, 2, 0, 0, s.QuestionTitle, CURRENT_TIMESTAMP, 'zadania', DATEADD(second, 1, CURRENT_TIMESTAMP), 0, 0, 0, 0, s.Category, 'zadania')

这是我得到的错误:

The MERGE statement conflicted with the FOREIGN KEY constraint "FK_dbo.Threads_dbo.Categories_CategoryName". The conflict occurred in database "Scyk", table "dbo.Categories", column 'Name'.

所以我做的第一件事是检查外键完整性:

SELECT Distinct(Category) FROM [Homework].[dbo].[Zadanes]
where not exists
(select distinct(Name) from Scyk.dbo.Categories)

但是这没有返回任何内容,这意味着外键是好的。那么这里发生了什么?

最佳答案

您应该停止使用MERGE,恕我直言,而只使用普通的INSERTMERGE 给您带来了什么?

在部分或所有受支持的 SQL Server 版本中,至少有 15 个错误尚未修复:

听起来像this is the one causing your issue ,并且它已被关闭为“无法修复”。 last one may resolve your issue (get the fix from KB #956718),但不知何故我对此表示怀疑。即使确实如此,那么您也可能会受到其中列出的其他 14 个因素之一(或另一个尚未发现的因素)的影响。可悲的是,这是一个只经过最少测试就发布了半成品功能,然后在 3 个以上版本中忽略它的情况。

如果您想检查外键,您的查询可能应如下所示:

SELECT Distinct(Category) FROM [Homework].[dbo].[Zadanes] AS z
where not exists
(select 1 from Scyk.dbo.Categories AS c WHERE c.name = z.Category);

尽管奇怪的是,您的名称上有一个外键,而不是一个 CategoryID。名称更改后会发生什么?您是否设置了级联选项?在 Zadanes 的每一行中重复 'Electronics' 或更长的类别名称会浪费多少空间?

关于sql - 合并引发外键冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19819139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com