我正在开展一项学校作业,希望我将一些新值插入数据库表,然后根据INSERT是否成功打印一条消息。
问题是这样的:
编写一个试图插入名为“Guitars”的新类别的脚本 进入Categories表。如果插入成功,则为脚本 应显示以下消息:SUCCESS:已插入记录。
如果更新失败,脚本应显示一条消息 像这样:FAILURE:没有插入记录。错误2627: 违反UNIQUE KEY约束'UQ_ Categori _8517B2E0A87CE853'。 无法在对象'dbo.Categories'中插入重复键。重复 关键值是(吉他)。
目前,此Categories表包含2列:CategoryID和Category name。它填充了值
1 Guitars
2 Basses
3 Drums
4 Keyboards
显然,问题要求你插入的吉他类别已经存在,所以我猜这个问题的重点是让它打印错误信息。问题的逻辑似乎相当简单;将吉他类别插入表格中。如果插入成功,则打印这样的。如果不成功,请打印出某某。我只是不确定语法。这是我到目前为止所获得的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).'
我觉得IF语句中有某种布尔方程式(IF INSERT =成功,IF成功= TRUE等),但我只是不确定如何编写它。我是在正确的轨道上吗?
编辑:我应该提一下我正在使用SQL Server 2012
答案 0 :(得分:4)
我会自己使用try / catch
begin try
insert query
print message
end try
begin catch
print message
end catch
你应该可以从这里拿走它。
答案 1 :(得分:1)
USE MyGuitarShop
GO
BEGIN TRY
-- Insert the data
INSERT INTO Categories (CategoryName)
VALUES ('Guitars')
PRINT 'SUCCESS: Record was inserted.'
END TRY
BEGIN CATCH
PRINT 'FAILURE: Record was not inserted.';
PRINT 'Error ' + CONVERT(VARCHAR, ERROR_NUMBER(), 1) + ': '+ ERROR_MESSAGE()
END CATCH
GO
答案 2 :(得分:0)
如果您的代码返回错误代码,您可以检查@@ ROWCOUNT以查看插入的ROWS数量或@@ ERROR。
这里有一些关于此的内容:
答案 3 :(得分:0)
有两类错误处理。
使用@@ ERROR系统变量检查错误。使用BEGIN / END TRY和BEGIN / END CATCH。
此外,RAISERROR或THROW语句可用于特定于业务规则的错误。
查看我关于该主题的四篇博客文章。大量的代码。
http://craftydba.com/?tag=error-handling
我使用你用IF ELSE开始的初始算法对此进行了编码。
-- Select the old database
USE MyGuitarShop;
go
-- Grab error value
DECLARE @ERR INT = 0;
-- Insert the data
INSERT INTO Categories
(CategoryID, CategoryName)
VALUES
(5, 'Guitars');
-- Simple error handling
SET @ERR = @@ERROR;
IF (@ERR = 0)
BEGIN
PRINT 'SUCCESS: Record was inserted';
END
ELSE IF (@ERR = 2627)
BEGIN
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 ';
END
ELSE
BEGIN
PRINT 'FAILURE: Record was not inserted.';
PRINT 'Error ' + STR(@ERR, 6, 0) + ' was not gracefully handled';
END
GO