답변:
아니요, 해결 방법을 사용해야합니다.
조건부 비트 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 데이터 유형으로 직접 매핑됩니다 .
이것은 비슷해 보이지만 일치하는 항목이 없으면 행이 없습니다 (0이 아님).
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)
예를 들어 , SQL에서 비트 변수를 부울로 사용할 수 없으며 부울 식을 비트로 강제 변환 할 수 없습니다. (예를 들어,와 SET @BitVariable = (1=1)
)
또 다른 해결책은 다음 ISNULL
과 함께 사용 하는 것입니다 SELECT TOP 1 1
.
SELECT ISNULL((SELECT TOP 1 1 FROM theTable where theColumn like 'theValue%'), 0)
나는 존재 는 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