SQL Server - 如何创建 IF EXISTS...SELECT AND SELECT

Posted

技术标签:

【中文标题】SQL Server - 如何创建 IF EXISTS...SELECT AND SELECT【英文标题】:SQL Server - How to create IF EXISTS...SELECT AND SELECT 【发布时间】:2019-04-14 18:08:26 【问题描述】:

我正在尝试对我的代码创建IF/ELSE 检查,以确保参数@BookTitle@GenreName 是表BookGenre 和流派中的记录,然后再尝试删除它们。我试图写这行代码,但收到错误,

一个非布尔类型的表达式,在需要条件的地方指定。

IF EXISTS (SELECT Id FROM Library.Book WHERE Title = @BookTitle AND 
               SELECT Id FROM Library.Genre WHERE Name = @GenreName)
ELSE

我需要一些关于如何创建 IF EXISTS 语句表达式的指导,该表达式包含两个单独的选择语句作为 IF 检查的一部分。

下面是整个 Store 过程(没有 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 你可能会感到惊讶。 我很抱歉没有更清楚。我想纯粹地了解更多关于 IF 语句的信息,并试图在这个过程中对其进行测试,即使我没有在其中做任何“令人兴奋”的事情。我找不到我正在寻找的答案,但能够在下面找到我的答案。 【参考方案1】:

您的括号已关闭;你需要两个EXISTS 条件:

IF EXISTS (SELECT Id FROM Library.Book WHERE Title = @BookTitle
          ) AND 
   EXISTS (SELECT Id FROM Library.Genre WHERE Name = @GenreName
          )
BEGIN
    . . .
END

【讨论】:

感谢您的快速回复。这正是我正在寻找的。​​span>

以上是关于SQL Server - 如何创建 IF EXISTS...SELECT AND SELECT的主要内容,如果未能解决你的问题,请参考以下文章

如何在sql server中使用if语句和case

sql serve创建存储过程,查询指定学生的学号、姓名、课程名、成绩

SQL中多分支If语句的性能(Sql Server 2008)

sql server 语法,有如下一段代码,两个if一块只有一个else,程序怎么走?

sqlserver 2000中 如何控制数据库表有且只有一条记录

SQL Server 创建带返回值的存储过程