Je me demandais s'il était possible de faire quelque chose comme ça (qui ne marche pas):
select cast( (exists(select * from theTable where theColumn like 'theValue%') as bit)
On dirait que cela devrait être faisable, mais beaucoup de choses qui devraient fonctionner en SQL ne le font pas;) J'ai déjà vu des solutions de contournement (SELECT 1 où ... existe ...), mais il me semble que je devrais pouvoir transformez le résultat de la fonction exist en un bit et faites-le avec.
Non, vous devrez utiliser une solution de contournement.
Si vous devez renvoyer un bit conditionnel 0/1, vous pouvez également:
SELECT CAST(
CASE WHEN EXISTS(SELECT * FROM theTable where theColumn like 'theValue%') THEN 1
ELSE 0
END
AS BIT)
Ou sans le casting:
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%'
Quand vous lancez pour mordre
bit
mappe directement à boolean
dans les types de données .net, même si ce n'est pas vraiment ...
Cela semble similaire mais ne donne aucune ligne (pas zéro) s'il n'y a pas de correspondance, donc ce n'est pas la même chose
SELECT TOP 1 CAST(NumberKeyCOlumn AS bit) FROM MyTable WHERE theColumn like 'theValue%'
Je suis un peu en retard sur la reprise pour cela; vient de trébucher sur le poste. Cependant, voici une solution plus efficace et plus nette que la réponse choisie, mais qui devrait offrir les mêmes fonctionnalités:
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
Vous pouvez utiliser IIF
et CAST
SELECT CAST(IIF(EXISTS(SELECT * FROM theTable
where theColumn like 'theValue%'), 1, 0) AS BIT)
Vous pouvez également faire ce qui suit:
SELECT DISTINCT 1
FROM theTable
WHERE theColumn LIKE 'theValue%'
S'il n'y a pas de valeurs commençant par 'theValue', cela retournera null (pas d'enregistrements) plutôt qu'un bit 0 si
Non ce n'est pas possible. Le type de données bit n'est pas un type de données booléen. Il s'agit d'un type de données entier pouvant être égal à 0,1 ou à NULL.
SELECT IIF(EXISTS(SELECT * FROM theTable WHERE theColumn LIKE 'theValue%'), 1, 0)
Une autre solution consiste à utiliser ISNULL
en tandem avec SELECT TOP 1 1
:
SELECT ISNULL((SELECT TOP 1 1 FROM theTable where theColumn like 'theValue%'), 0)