Merge语句与外国密钥约束冲突

问题描述 投票:0回答:2

我有两张桌子。 STCH是SSBT的一对一。 TN中的TN是SSBT中的外键。 SSBT是TN的作业列表。我想将STCH(员工列表)随着更新而更新,并使用合并语句。

STCH = TN(ID#), TE(name),SID(StaffID),HSE(Department),DTS(datetime stamp=today) SSBT = DATE(of assignment),TN(foreign key),PID(assignment #),SITE(bldg),DTS(datetime-today)
合并语句从另一个数据库中的一个类似表中获取数据,并在分配数据库中填充了我的STCH表:

MERGE STCH T USING (SELECT TN,TE,TCH.ID,U1 FROM DST17000FUHSD.DBO.TCH JOIN DST17000FUHSD.DBO.STJ j on j.id = DST17000FUHSD.DBO.TCH.id and (j.scl = 1 or j.scl = 0) WHERE tch.SC = 1 AND TN > 1 AND DST17000FUHSD.DBO.TCH.ID > 1 and tg = '' and j.jc = 12 and DST17000FUHSD.DBO.TCH.del = 0 ) S ON (S.TN = T.TN and s.id = t.sid) WHEN MATCHED THEN UPDATE SET T.TE = S.TE, T.SID = S.ID, T.HSE = S.U1 WHEN NOT MATCHED BY TARGET THEN INSERT (TN,TE,SID,HSE) VALUES (S.TN,S.TE,S.ID,S.U1) WHEN NOT MATCHED BY SOURCE THEN DELETE;
这是我的错误消息

MSG547,16级,状态0,第1行,合并语句与 参考约束“ FK_87”。冲突发生在数据库中 “ subman”,表“ dbo.ssbt”,列'tn'。该声明已经 终止

当我单独运行子查询时,我会得到正确的数据。 TN,TE,ID,U1

在这里是外国钥匙

USE [SUBMAN] GO ALTER TABLE [dbo].[SSBT] WITH CHECK ADD CONSTRAINT [FK_87] FOREIGN KEY([TN]) REFERENCES [dbo].[STCH] ([TN]) GO ALTER TABLE [dbo].[SSBT] CHECK CONSTRAINT [FK_87] GO

	
sql sql-server merge foreign-keys conflict
2个回答
9
投票
WHEN NOT MATCHED BY SOURCE THEN DELETE;

)在您的另一个表上引用。 如果您不想删除不在

Source
子查询中的数据,请删除查询的一部分。

tode realizar umavalyaçãonatabela coveenciada antes daedeclusão:


0
投票

删除;

	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.