我有以下情况:
TABLE_B
ID_MASTER
,COL
是引用TABLE_MASTER(ID, COL)
的外键样本数据:
ID ID_MASTER COL TYPE
--------------------------
1 1000 0 A
2 1000 0 A
3 2000 0 B
4 2000 0 B
TABLE_MASTER
(ID, COL)
是主键Sample数据:
ID COL DESC
--------------------
1000 0 XXX
2000 0 AAA
3000 0 BBB
--##SOURCETEMPTABLE
FROM_ID TO_ID
1000 3000
我正在尝试运行此UPDATE:
UPDATE P
SET P.ID_MASTER = N.TO_ID,
P.COL = 0
/*SELECT N.TO_ID,* --JUST FOR CHECK THE ROWS BEING UPDATED*/
FROM TABLE_B P
INNER JOIN ##SOURCETEMPTABLE N ON N.FROM_ID = P.ID_MASTER
WHERE P.ID_MASTER = 1000
返回错误“外键冲突”
UPDATE语句与FOREIGN KEY约束“ FKTABLE_B_ID”冲突。在数据库“ base_x”的表“ dbo.TABLE_MASTER”中发生了冲突
但是,当我使用“静态”值而不是N.TO_ID
运行同一条语句时,它可以正常工作:
UPDATE P
SET P.ID_MASTER = 2000, --static value
P.COL = 0
/*SELECT N.TO_ID,* --JUST FOR CHECK THE ROWS BEING UPDATED*/
FROM TABLE_B P
INNER JOIN ##SOURCETEMPTABLE N ON N.FROM_ID = P.ID_MASTER
WHERE P.ID_MASTER = 1000
答案 0 :(得分:1)
您的错误无法重现。我进行了以下测试,并收到消息(受影响的2行),没有错误消息。您必须做的不是您在问题中所描述的:
CREATE TABLE TABLE_MASTER (
ID int
, COL int
, CONSTRAINT PK_TM
PRIMARY KEY (ID, COL)
);
INSERT INTO TABLE_MASTER VALUES
(1000,0)
,(2000,0)
,(3000,0)
;
CREATE TABLE TABLE_B (
ID int
, ID_MASTER int
, COL int
, CONSTRAINT PK_TB
PRIMARY KEY (ID)
, CONSTRAINT FKTABLE_B_ID
FOREIGN KEY (ID_MASTER, COL)
REFERENCES TABLE_MASTER(ID, COL)
);
INSERT INTO TABLE_B VALUES
(1,1000,0)
,(2,1000,0)
,(3,2000,0)
,(4,2000,0)
;
CREATE TABLE Source (
FROM_ID int
, TO_ID int
)
INSERT INTO Source VALUES (1000,3000);
UPDATE
P
SET
P.ID_MASTER = N.TO_ID,
P.COL = 0
/*SELECT N.TO_ID,* --JUST FOR CHECK THE ROWS BEING UPDATED*/
FROM TABLE_B P
INNER JOIN Source N
ON N.FROM_ID = P.ID_MASTER
WHERE P.ID_MASTER = 1000