[英]Create a stored procedure with an IF/Else conditional that inserts into a table
我遇到了一个我从未见过的问题。 这要求创建一个将新书插入 Books 表的过程。 此过程必须使用 If/Else 条件,其中IF将处理插入,而ELSE将引发错误。
我在使用 If/Else 时遇到了问题,因为我过去一直这样做的方式是使用 If 抛出错误,而 else 进行插入。 它还没有完成,但这是我所得到的。
CREATE PROC spInsertBook
@BookID INT = NULL,
@BookISBN VARCHAR(50) = NULL,
@BookTitle VARCHAR(50) = NULL,
@BookAuthor VARCHAR(50) = NULL,
@BookPublisher VARCHAR(50) = NULL,
@BookGenre VARCHAR(50) = NULL
AS
IF NOT EXISTS (SELECT * FROM Books WHERE BookID = @BookID)
THROW 50001, 'BookID already exists!', 1;
ELSE
SET BookID = @BookID
IF EXISTS (SELECT * FROM Books WHERE BookISBN = @BookISBN)
THROW 50001, 'BookISBN already exists!', 1;
IF @BookTitle IS NULL
THROW 50001, 'Enter a book title!', 1;
IF @BookAuthor IS NULL
THROW 50001, 'Enter a book author!', 1;
IF @BookPublisher IS NULL
THROW 50001, 'Enter a book publisher!', 1;
IF @BookGenre IS NULL
THROW 50001, 'Enter a book genre!', 1;
ELSE
INSERT Books
VALUES(@BookID, @BookISBN, @BookTitle, @BookAuthor, @BookPublisher, @BookGenre)
你可以看到我使用 If 语句抛出错误和 else 插入输入参数,但这需要反转,有什么想法吗?
你在寻找这样的东西吗? 在错误处理之前,您首先在哪里进行全面的正面测试?
CREATE PROC spInsertBook
(
@BookID INT = NULL,
@BookISBN VARCHAR(50) = NULL,
@BookTitle VARCHAR(50) = NULL,
@BookAuthor VARCHAR(50) = NULL,
@BookPublisher VARCHAR(50) = NULL,
@BookGenre VARCHAR(50) = NULL
)
AS
begin
set nocount on;
if not exists (SELECT * FROM Books WHERE BookID = @BookID)
and not exists (SELECT * FROM Books WHERE BookISBN = @BookISBN)
and @BookTitle IS not NULL
and @BookAuthor IS not NULL
and @BookPublisher IS not NULL
and @BookGenre IS not NULL
begin
INSERT Books (BookID, BookISBN, BookTitle, BookAuthor, BookPublisher, BookGenre)
VALUES (@BookID, @BookISBN, @BookTitle, @BookAuthor, @BookPublisher, @BookGenre)
end else begin
if exists (SELECT * FROM Books WHERE BookID = @BookID)
begin
THROW 50001, 'BookID already exists!', 1;
end else if exists (SELECT * FROM Books WHERE BookISBN = @BookISBN)
begin
THROW 50001, 'BookISBN already exists!', 1;
end else if @BookTitle IS NULL
begin
THROW 50001, 'Enter a book title!', 1;
end else if @BookAuthor IS NULL
begin
THROW 50001, 'Enter a book author!', 1;
end else if @BookPublisher IS NULL
begin
THROW 50001, 'Enter a book publisher!', 1;
end else if @BookGenre IS NULL
begin
THROW 50001, 'Enter a book genre!', 1;
end
end
return 0;
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.