我使用了BULK INSERT而没有CHECK_CONSTRAINT来填充两个相关的表。
Country
- Id
- Name
Location
- Id
- CountryId
- Name
当我使用JOIN查询时,我没有收到任何错误,并且所有位置似乎都显示了一个国家/地区:
SELECT l.Id, l.CountryId, c.Name FROM Location l JOIN Country c ON l.CountryId=C.Id;
但是当我用CHECK_CONSTRAINT运行BULK INSERT时,我收到一个错误:
The INSERT statement conflicted with the FOREIGN KEY
constraint "FK_Location_CountryId_Country_Id". The conflict occurred in
database "test", table "dbo.Country", column 'Id'.
这并不能帮我识别出错误的行。
当出现外键错误时,JOIN查询会发生什么? 在执行BULK INSERT时,我找到错误行的最快方法是什么?
答案 0 :(得分:0)
这样的事情可能有所帮助:
SELECT * FROM Location WHERE CountryId NOT IN (SELECT Id FROM Country);
但问题是忘记在Location表之前填充Country表。
答案 1 :(得分:0)
当我使用JOIN查询时,我没有收到任何错误,并且所有位置似乎都显示了一个国家/地区:
这是因为您的代码只返回表Locations
中存在CountryId
的{{1}}。
要查找Country
中没有相应有效Location
的行,您可以使用CountryId
或not exists()
,如下所示:
not in ()