Создайте хранимую процедуру с условным выражением IF / Else, которая вставляется в таблицу - PullRequest
0 голосов
/ 01 мая 2020

У меня проблема, которую я никогда раньше не видел. Для этого требуется создать процедуру, которая вставляет новую книгу в таблицу «Книги». Эта процедура должна использовать условие 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, чтобы выдавать ошибки, а остальное, чтобы вставить входные параметры, но это нужно изменить, есть идеи?

1 Ответ

4 голосов
/ 01 мая 2020

Вы ищете что-то подобное? Где вы делаете полный положительный тест перед обработкой ошибок?

    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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...