我正在通过一本书学习SQL,它提供了以下代码用于错误处理

Create procedure sp_ErrorHandling
@SupplierID int,
@ProductID int,
@ProductName text
AS
Begin TRY
Insert into tbls_products_sp(ProductID,SupplierID,ProductName)
Values(@SupplierID,@ProductID,@ProductName)
END TRY
BEGIN CATCH
Print 'Supplier does not exist'
END CATCH

exec sp_ErrorHandling @ProductID=73,@SupplierID=11,@ProductName='Chocolate'

exec sp_ErrorHandling @ProductID=73,@SupplierID=11,@ProductName='Chocolate'

它说,因为不存在带有值11的SupplierID,它将生成一个错误。
当我使用带有值11的SupplierID时,它不会产生错误。

我的问题是,当我们使用INSERT语句时,插入语句不是要在现有表中输入新记录的重点。因此,如果我提供新记录的值,是否不应该将它们添加到表中而不是错误?

最佳答案

我的猜测是,这本书正在尝试教您外键约束的概念。

由于有外键约束,如果您在表B中插入一条记录而表A中不存在外键值,则SQL Server将引发错误。

假设您有一张country_codes表和一张客户表。您定义了一个外键约束,该约束说当您将记录插入客户时,countrycode值必须存在于country_codes表中。

因此,如果countrycode值表中没有countrycode值,则在创建新的客户记录时,将引发错误。

10-08 13:33