当出现外键错误时,JOIN查询会发生什么?

时间:2017-02-23 16:14:00

标签: sql-server

我使用了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时,我找到错误行的最快方法是什么?

2 个答案:

答案 0 :(得分:0)

这样的事情可能有所帮助:

SELECT * FROM Location WHERE CountryId NOT IN (SELECT Id FROM Country);

但问题是忘记在Location表之前填充Country表。

答案 1 :(得分:0)

  

当我使用JOIN查询时,我没有收到任何错误,并且所有位置似乎都显示了一个国家/地区:

这是因为您的代码只返回表Locations中存在CountryId的{​​{1}}。

要查找Country中没有相应有效Location的行,您可以使用CountryIdnot exists(),如下所示:

not in ()