返回 SQL 选择语句的布尔值

如何返回 SQL 选择语句上的布尔值?

我试过这个代码:

SELECT CAST(1 AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)

而且只有在表上存在 UserID时它才返回 TRUE。如果表中不存在 UserID,我希望它返回 FALSE

425031 次浏览

如果用户不存在,那么您所拥有的将不返回任何行:

SELECT CASE WHEN EXISTS (
SELECT *
FROM [User]
WHERE UserID = 20070022
)
THEN CAST(1 AS BIT)
ELSE CAST(0 AS BIT) END

可能是这样的:

SELECT CAST(CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS BIT)
FROM dummy WHERE id = 1;

http://sqlfiddle.com/#!3/5e555/1

假设通常是 1 = true0 = false,所有您需要做的就是计算行数,然后强制转换为 boolean

因此,您发布的代码只需要添加一个 COUNT()函数:

SELECT CAST(COUNT(1) AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)
select CAST(COUNT(*) AS BIT) FROM [User] WHERE (UserID = 20070022)

如果 count (*) = 0返回 false,如果 count (*) > 0返回 true。

我是这样做的:

SELECT 1 FROM [dbo].[User] WHERE UserID = 20070022

布尔值永远不能为空(至少在。NET) ,它应该默认为 false,或者如果默认为 true,你可以自己设置为 false。但是1 = true,所以 null = false,没有额外的语法。

注意: 我使用 Dapper 作为我的微型机器人,我想 ADO 也应该如此。

使用返回0或1的“存在”。

这个问题会是这样的:

SELECT EXISTS(SELECT * FROM USER WHERE UserID = 20070022)

注意另一个等价的问题: 创建一个 SQL 查询,如果满足条件,返回(1) ,否则返回空结果。请注意,这个问题的解决方案更一般,可以很容易地与上面的答案一起使用,以实现您提出的问题。由于这个问题是更一般的,我正在证明它的解决方案,除了美丽的解决方案上面提出了你的问题。

SELECT DISTINCT 1 AS Expr1
FROM [User]
WHERE (UserID = 20070022)

对于那些有兴趣获得添加自定义列名的值的人来说,这对我很有用:

CAST(
CASE WHEN EXISTS (
SELECT *
FROM mytable
WHERE mytable.id = 1
)
THEN TRUE
ELSE FALSE
END AS bool)
AS "nameOfMyColumn"

如果你对保留列名的大小写敏感性不感兴趣(在某些客户端) ,你可以跳过列名的双引号。

我稍微调整了一下“查德”的回答。

DECLARE @isAvailable      BIT = 0;


IF EXISTS(SELECT 1  FROM [User] WHERE (UserID = 20070022))
BEGIN
SET @isAvailable = 1
END

初始可用布尔值设置为0