sql-server – 为什么会出现错误`有时在合并命令上尝试将非NULL-able列的值设置为NULL`?

我使用merge语句插入新数据或删除数据.我使用临时表作为源,使用表作为目标.

目标表有一个带有另一个表的外键(表A).

我有时会遇到以下错误(当匹配然后删除语句时).

error:
    Attempting to set a non-NULL-able column's value to NULL.

如果我评论此行,则查询运行完美.

如果我删除Material表和表之间的外键A查询也完美运行.

我已应用此Hotfix,但我已提到问题了.

SQL Server版本:Microsoft SQL Server 2008 R2(SP1) – 10.50.2550.0(X64)

**Target Tbale (Material)**                **Table A**

PatientIdRef (ForeignKey)             PatientId(Primary Key)
VisitNumberRef(Foreign Key)           VisitNumber(Primary Key)
Unit_Price                            Name
Unit_Price_Ins                        family
....
....                            

create tabl #Temp 
(
  patinetId [varchar](50) NOT NULL,
  [Visit_Number] [smallint] NULL,
  [Unit_Price] [float] NULL,
  [Unit_Price_Ins] [float] NULL,
  ......
  .....
)
merge materials as target
using(select patinetId ,Visit_Number,Unit_Price,Unit_Price_Ins
from #Temp
) as source
on (source.patientid=target.patientid collate arabic_ci_as and source.visit_number=target.visit_number)
when matched then delete
when not matched then insert
(patinetIdref ,Visit_Numberref,Unit_Price,Unit_Price_Ins )
values(patinetId ,Visit_Number,Unit_Price,Unit_Price_Ins)
最佳答案
由于在目标表具有多个外键(FK)约束的情况下遇到此问题,因此很可能是由于此错误:FIX: “Attempting to set a non-NULL-able column’s value to NULL” error message when you use a MERGE statement in SQL Server 2008, in SQL Server 2008 R2 or in SQL Server 2012

您正在运行SQL Server 2008 R2 SP1版本10.50.2550

这在SQL Server 2008 R2 SP1版本10.50.2822及更高版本(累积更新8)中得到修复.

从这里下载:Cumulative update package 8 for SQL Server 2008 R2 Service Pack 1

或者,最好下载适用于SQL Server 2008 R2 SP1的最新累积更新:Cumulative update package 13 for SQL Server 2008 R2 SP1

您提到您已经为此应用了一个SQL Server修补程序,但我建议您通过执行SELECT @@ VERSION并验证版本号是否为10.50.2822或更高版本来仔细检查它是否已正确安装.

转载注明原文:sql-server – 为什么会出现错误`有时在合并命令上尝试将非NULL-able列的值设置为NULL`? - 代码日志