繁体   English   中英

使用插入表的 IF/Else 条件创建存储过程

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM