是否可以直接selectEXISTS?

我想知道是否有可能做这样的事情(这是行不通的):

select cast( (exists(select * from theTable where theColumn like 'theValue%') as bit)

似乎它应该是可行的,但很多事情应该在SQL中工作不);我已经看到了解决方法(select1其中…存在…),但似乎我应该能够将存在函数的结果作为一点点,并用它来完成。

不,您必须使用解决方法。

如果你必须返回一个条件位0/1,另一种方法是:

 SELECT CAST( CASE WHEN EXISTS(SELECT * FROM theTable where theColumn like 'theValue%') THEN 1 ELSE 0 END AS BIT) 
 SELECT CAST(COUNT(*) AS bit) FROM MyTable WHERE theColumn like 'theValue%' 

当你投了一下

  • 0 – > 0
  • 一切 – > 1
  • 而NULL – > NULL当然,但是你不能用COUNT(*)得到NULL而没有GROUP BY

bit直接映射到.net数据types的boolean ,即使它不是真的…

这看起来相似,但没有行(不为零),如果没有匹配,所以它是不一样的

 SELECT TOP 1 CAST(NumberKeyCOlumn AS bit) FROM MyTable WHERE theColumn like 'theValue%' 

我对此有点迟了, 只是偶然发现了这个post。 不过,这里的解决scheme比选定的答案更有效率,而且应该具有相同的function:

 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 

您可以使用IIFCAST

 SELECT CAST(IIF(EXISTS(SELECT * FROM theTable where theColumn like 'theValue%'), 1, 0) AS BIT) 

您还可以执行以下操作:

 SELECT DISTINCT 1 FROM theTable WHERE theColumn LIKE 'theValue%' 

如果没有以'theValue'开始的值,这将会返回null(没有logging),而不是0

不,这是不可能的。 位数据types不是布尔数据types。 它是一个整型数据types,可以是0,1或NULL。

我相信存在只能在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