如何在SQL Server中创建IF EXISTS ... SELECT和SELECT语句

3
我试图在我的代码中创建一个if/else检查,以确保参数@BookTitle和@GenreName是表BookGenre和Genre中的记录,然后再尝试删除它们。我尝试编写这行代码,但收到了错误信息:
“在期望条件的位置指定了非布尔类型的表达式。”
IF EXISTS (SELECT Id FROM Library.Book WHERE Title = @BookTitle AND 
               SELECT Id FROM Library.Genre WHERE Name = @GenreName)
ELSE

我需要一些关于如何创建一个IF EXISTS语句表达式的指导,其中包括两个单独的选择语句作为IF检查的一部分。
以下是完整的存储过程(不包括IF语句):
PROCEDURE [Library].[DeleteDateFromBookGenre]
        -- Parameters to select which record delete
        @BookTitle nvarchar(200),
        @GenreName nvarchar(50)
    AS
    BEGIN
        -- SET NOCOUNT ON added to prevent extra result sets from
        -- interfering with SELECT statements.
        SET NOCOUNT ON;

        IF EXISTS (SELECT Id FROM Library.Book WHERE Title = @BookTitle) 
        IF EXISTS (SELECT Id FROM Library.Book WHERE Title = @BookTitle)

        -- Deletes the specified and selected data from the Genre and Book table.
        DELETE FROM Library.BookGenre 
        WHERE BookId IN (
        SELECT Id
        FROM Library.Book
        WHERE Title = @BookTitle
        ) AND
        GenreId IN (
        SELECT Id
        FROM Library.Genre
        WHERE Name = @GenreName
        )
    END

如果您不执行任何令人兴奋的操作(例如throw异常),而只是尝试执行检查,则不清楚您为什么要执行该检查。如果您直接执行delete语句,那么可以检查@@RowCount。如果它是0,则表示未找到标题、流派或两者都未找到。如果是1,则书籍/流派对是唯一的。如果> 1,则可能会感到惊讶。 - HABO
非常抱歉我没有表达得更清楚。我只是想更多地了解IF语句,并试图在这个过程中进行测试,尽管我在其中并没有做任何“令人兴奋”的事情。我找不到我要找的答案,但是最终还是得到了答案。 - Ethan Hart
1个回答

4
你的括号有误,你需要两个 EXISTS 条件:
IF EXISTS (SELECT Id FROM Library.Book WHERE Title = @BookTitle
          ) AND 
   EXISTS (SELECT Id FROM Library.Genre WHERE Name = @GenreName
          )
BEGIN
    . . .
END

感谢您的快速回复。这正是我所寻找的。 - Ethan Hart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接