Ich habe mich gefragt, ob es möglich ist, so etwas zu tun (was nicht funktioniert):
select cast( (exists(select * from theTable where theColumn like 'theValue%') as bit)
Scheint, als ob es machbar sein sollte, aber viele Dinge, die in SQL funktionieren sollten, funktionieren nicht;) Ich habe Problemumgehungen dafür gesehen (SELECT 1, wo ... existiert ...), aber es scheint, als ob ich in der Lage sein sollte, einfach Wirf das Ergebnis der Exists-Funktion als ein Bit und mache es damit.
Nein, Sie müssen eine Problemumgehung verwenden.
Wenn Sie ein bedingtes Bit 0/1 zurückgeben müssen, können Sie folgendermaßen vorgehen:
SELECT CAST(
CASE WHEN EXISTS(SELECT * FROM theTable where theColumn like 'theValue%') THEN 1
ELSE 0
END
AS BIT)
Oder ohne die Besetzung:
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%'
Wenn du zu wenig zählst
bit
ist in .net-Datentypen direkt boolean
zugeordnet, auch wenn es nicht wirklich ...
Dies sieht ähnlich aus, gibt aber keine Zeile (nicht Null) aus, wenn keine Übereinstimmungen vorhanden sind. Es ist also nicht dasselbe
SELECT TOP 1 CAST(NumberKeyCOlumn AS bit) FROM MyTable WHERE theColumn like 'theValue%'
Ich bin etwas spät dran bei der Übernahme; stolperte gerade über den Pfosten. Hier ist jedoch eine Lösung, die effizienter und übersichtlicher ist als die ausgewählte Antwort, jedoch die gleiche Funktionalität bieten sollte:
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
Sie können IIF
und CAST
verwenden.
SELECT CAST(IIF(EXISTS(SELECT * FROM theTable
where theColumn like 'theValue%'), 1, 0) AS BIT)
Sie können auch Folgendes tun:
SELECT DISTINCT 1
FROM theTable
WHERE theColumn LIKE 'theValue%'
Wenn keine Werte vorhanden sind, die mit 'theValue' beginnen, wird jedoch ein Wert von null (keine Datensätze) zurückgegeben, jedoch kein Bit 0
Nein, das ist nicht möglich. Der Bitdatentyp ist kein boolescher Datentyp. Es ist ein ganzzahliger Datentyp, der 0,1 oder NULL sein kann.
SELECT IIF(EXISTS(SELECT * FROM theTable WHERE theColumn LIKE 'theValue%'), 1, 0)
Eine andere Lösung ist die Verwendung von ISNULL
in Kombination mit SELECT TOP 1 1
:
SELECT ISNULL((SELECT TOP 1 1 FROM theTable where theColumn like 'theValue%'), 0)