无法理解这个SQL语句?为什么会产生错误

时间:2016-03-30 17:33:25

标签: sql-server stored-procedures error-handling

我正在通过一本书学习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语句时,不是insert语句在现有表中输入新记录的要点。因此,如果我为新记录提供值,那么它们是否应该添加到表中而不是错误?

1 个答案:

答案 0 :(得分:1)

我的猜测是,本书试图教你外键约束的概念。

如果将记录插入表B并且表A中不存在外键值,则使用外键约束,SQL Server将引发错误。

想象一下,您有一个country_codes表和一个客户表。您定义了一个外键约束,该约束说明当您向客户插入记录时,countrycode值必须存在于country_codes表中。

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