Answers:
不,您必须使用一种解决方法。
如果必须返回条件位0/1,则另一种方法是:
SELECT CAST(
CASE WHEN EXISTS(SELECT * FROM theTable where theColumn like 'theValue%') THEN 1
ELSE 0
END
AS BIT)
或不使用演员表:
SELECT
CASE
WHEN EXISTS( SELECT 1 FROM theTable WHERE theColumn LIKE 'theValue%' )
THEN 1
ELSE 0
END
SELECT CAST(COUNT(*) AS bit) FROM MyTable WHERE theColumn like 'theValue%'
当你投到位
bit
直接映射到 boolean
即使不是真的,也 .net数据类型。
这看起来很相似,但是如果没有匹配项,则不提供任何行(不为零),因此不一样
SELECT TOP 1 CAST(NumberKeyCOlumn AS bit) FROM MyTable WHERE theColumn like 'theValue%'
EXISTS
,COUNT
即使在找到第一个数据后,也会继续在数据中寻找匹配的行,因为它需要计数。
我对此迟到了一点;偶然发现了该职位。但是,这是一个比所选答案更有效,更整洁的解决方案,但应提供相同的功能:
declare @t table (name nvarchar(16))
declare @b bit
insert @t select N'Simon Byorg' union select N'Roe Bott'
select @b = isnull((select top 1 1 from @t where name = N'Simon Byorg'),0)
select @b whenTrue
select @b = isnull((select top 1 1 from @t where name = N'Anne Droid'),0)
select @b whenFalse
不,这是不可能的。位数据类型不是布尔数据类型。它是整数数据类型,可以为0,1或NULL。
IF(@TRUE)
例如,布尔表达式也不能反之亦然。(例如SET @BitVariable = (1=1)
)
我相信存在只能在where子句中使用,因此您必须采取一种解决方法(或将where作为子句存在的子查询)。我不知道这是否可以解决。
那这个呢:
create table table1 (col1 int null)
go
select 'no items',CONVERT(bit, (select COUNT(*) from table1) ) -- returns 'no items', 0
go
insert into table1 (col1) values (1)
go
select '1 item',CONVERT(bit, (select COUNT(*) from table1) ) --returns '1 item', 1
go
insert into table1 (col1) values (2)
go
select '2 items',CONVERT(bit, (select COUNT(*) from table1) ) --returns '2 items', 1
go
insert into table1 (col1) values (3)
go
drop table table1
go