【问题标题】:SQL Server - How to create IF EXISTS...SELECT AND SELECTSQL Server - 如何创建 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 语句的信息,并试图在这个过程中对其进行测试,即使我没有在其中做任何“令人兴奋”的事情。我找不到我正在寻找的答案,但能够在下面找到我的答案。

标签: sql sql-server tsql dml


【解决方案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>
猜你喜欢
  • 2018-02-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
  • 2011-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
相关资源
最近更新 更多