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 serve创建存储过程,查询指定学生的学号、姓名、课程名、成绩
SQL中多分支If语句的性能(Sql Server 2008)
sql server 语法,有如下一段代码,两个if一块只有一个else,程序怎么走?