[英]Foreign key constraint triggered even though data does exist
我有兩個表INTRFCTRL
和INTERROR
,都具有IDENTITY列FILEID
INTERROR附加了以下外鍵
ALTER TABLE [dbo].[INTERROR] WITH CHECK
ADD CONSTRAINT [FK_INTERROR_0] FOREIGN KEY([FILEID])
REFERENCES [dbo].[INTRFCTRL] ([FILEID])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[INTERROR] CHECK CONSTRAINT [FK_INTERROR_0]
我將臨時表中的數據插入INTRFCTRL
,然后嘗試將其插入INTERROR
並使用DBCC RESEED控制標識列的值
我運行成功,可以看到INTRFCTRL表中存在文件ID 67001
DBCC CHECKIDENT (INTRFCTRL, RESEED, 67000)
INSERT INTO dbo.INTRFCTRL SELECT FILEHASH,CASENO,INTNO,FILENAM,...
FROM INTRFCTRL_TEMP
然后當我嘗試跑步時
DBCC CHECKIDENT (INTERROR, RESEED, 67000)
INSERT INTO dbo.INTERROR SELECT INTRFLINENO,CASENO... FROM INTERROR_TEMP
我懂了
INSERT語句與FOREIGN KEY約束“ FK_INTERROR_0”沖突。 數據庫“ ESSDEV”的表“ dbo.INTRFCTRL”的列“ FILEID”中發生了沖突。
但是我可以在INTRFCTRL中看到數據
我究竟做錯了什么?
我建議使用OUTPUT
子句,而不要操縱IDENTITY
值:
我將臨時表中的數據插入INTRFCTRL,然后嘗試將同樣的數據插入INTERROR
DECLARE @MyTableVar table(identity_col INT, file_id INT );
INSERT INTO dbo.INTRFCTRL(col_list, ...)
OUTPUT inserted.identity_col, inserted.file_id --get inserted identity value
INTO @MyTabVar
SELECT FILEHASH,CASENO,INTNO,FILENAM,...
FROM INTRFCTRL_TEMP;
SET IDENTITY_INSERT dbo.INTERROR ON;
INSERT INTO dbo.INTERROR(col_list, ...)
SELECT t.identity_col, INTRFLINENO,CASENO...
FROM INTERROR_TEMP it
JOIN @MyTabVar t
ON it.fileId = t.File_id;
SET IDENTITY_INSERT dbo.INTERROR OFF;
嘗試將INTERROR上的IDENTITY_INSERT設置為OFF,然后從INTRFCTRL表中獲取FILEID值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.