我正在通过一本书学习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值,则在创建新的客户记录时,将引发错误。