【发布时间】: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