用于检查 INSERT 是否成功的 SQL 语法?

EJF*_*EJF 6 sql database sql-server insert sql-server-2012

我正在处理一项学校作业,该作业希望我将一些新值插入到数据库表中,然后根据 INSERT 是否成功打印一条消息。

问题是这样的:

编写一个脚本,尝试将名为“吉他”的新类别插入到类别表中。如果插入成功,脚本应显示以下消息:成功:记录已插入。

如果更新不成功,脚本应显示如下消息:失败:未插入记录。错误 2627:违反 UNIQUE KEY 约束“UQ_ Categori _8517B2E0A87CE853”。无法在对象“dbo.Categories”中插入重复键。重复的键值为(吉他)。

目前,此类别表包含 2 列:类别 ID 和类别名称。它填充了值

1     Guitars
2     Basses
3     Drums
4     Keyboards 
Run Code Online (Sandbox Code Playgroud)

显然,问题希望您插入的吉他类别已经存在,所以我猜这个问题的重点是让它打印错误消息。这个问题的逻辑似乎相当简单。将吉他类别插入表中。如果插入成功,则打印诸如此类。如果不成功,打印某某。我只是不确定语法。这是我到目前为止的 SQL 代码:

USE MyGuitarShop;

INSERT INTO Categories (CategoryID, CategoryName)
VALUES (5, 'Guitars')

IF (          ) --insert is successful
    PRINT 'SUCCESS: Record was inserted'
ELSE --if insert is unsuccessful
    PRINT 'FAILURE: Record was not inserted.'
    PRINT 'Error 2627: Violation of UNIQUE KEY constraint 'UQ__Categori__8517B2E0A87CE853'.' 
    PRINT 'Cannot insert duplicate key in object 'dbo.Categories'. The duplicate key value is (Guitars).'
Run Code Online (Sandbox Code Playgroud)

我觉得 IF 语句中会有某种布尔方程(IF INSERT = 成功,IF 成功 = TRUE 等),但我只是不确定如何编写它。我在正确的轨道上吗?

编辑:我应该提到我使用的是 SQL Server 2012

Dan*_*cuk 5

我会使用 try/catch 自己

begin try
insert query
print message
end try

begin catch
print message
end catch
Run Code Online (Sandbox Code Playgroud)

你应该可以从这里拿走它。