Zastanawiałem się, czy można zrobić coś takiego (co nie działa):
select cast( (exists(select * from theTable where theColumn like 'theValue%') as bit)
Wydaje się, że powinno to być wykonalne, ale wiele rzeczy, które powinny działać w SQL, nie;) Widziałem obejścia tego problemu (WYBIERZ 1, gdzie ... Istnieje ...), ale wydaje się, że powinienem móc po prostu rzutuj nieco wynik istniejącej funkcji i zakończ ją.
sql
sql-server
tsql
jcollum
źródło
źródło
Kiedy rzucisz na bit
bit
mapuje bezpośrednio naboolean
typy danych .net, nawet jeśli tak naprawdę nie jest ...Wygląda podobnie, ale nie daje wiersza (nie zero), jeśli nie pasuje, więc nie jest taki sam
źródło
EXISTS
,COUNT
nadal szuka danych w celu dopasowania wierszy nawet po znalezieniu pierwszego, ponieważ musi zostać policzony.Trochę spóźniłem się z tym; potknąłem się o słupek. Oto jednak rozwiązanie, które jest bardziej wydajne i schludne niż wybrana odpowiedź, ale powinno zapewniać tę samą funkcjonalność:
źródło
Możesz użyć
IIF
iCAST
źródło
Możesz także wykonać następujące czynności:
Jeśli nie ma wartości zaczynających się od „theValue”, to zwróci null (brak rekordów) zamiast nieco 0
źródło
Nie, to nie jest możliwe. Bitowy typ danych nie jest typem danych boolowskich. Jest to całkowity typ danych, który może wynosić 0,1 lub NULL.
źródło
IF(@TRUE)
na przykład, ani odwrotnie, wyrażenie boolowskie nie może zostać trochę zmienione . (Z np.SET @BitVariable = (1=1)
)Innym rozwiązaniem jest użycie
ISNULL
w połączeniu zSELECT TOP 1 1
:źródło
Wierzę , że istnieje można użyć tylko w klauzuli where, więc będziesz musiał zrobić obejście (lub podzapytanie, w którym istnieje klauzula where). Nie wiem, czy to się liczy jako obejście.
A co z tym:
źródło
źródło