2010-09-29 5 views
16

J'essaye de travailler comment écrire une procdure de magasin qui renvoie une valeur booléenne. J'ai commencé à écrire le suivant qui renvoie un int.Comment retourner bool à partir de proc stocké

USE [Database] 
GO 
/****** Object: StoredProcedure [dbo].[ReturnInt] Script Date: 09/30/2010 09:31:11 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER procedure [dbo].[ReturnInt] AS 
RETURN 3 

Je ne suis pas sûr cependant comment écrire un pour retourner une valeur booléenne.

Quelqu'un peut-il aider? Est-ce un peu la valeur?

+0

Quelle base de données utilisez-vous? – RedFilter

Répondre

29

Vous ne pouvez pas. Il n'y a pas de type de données booléen et le code de retour de la procédure ne peut être qu'un int. Vous pouvez cependant renvoyer un bit comme paramètre de sortie.

CREATE PROCEDURE [dbo].[ReturnBit] 
@bit BIT OUTPUT 
AS 
    BEGIN 
    SET @bit = 1 
    END 

Et pour appeler

DECLARE @B BIT 
EXEC [dbo].[ReturnBit] @B OUTPUT 
SELECT @B 
+1

Selon ce que vous faites, vous pouvez utiliser une fonction à la place. –

+1

Merci pour la réponse! –

16

Utilisez ceci:

SELECT CAST(1 AS BIT)

+0

Works pour SQL 2012, ne sait pas sur les précédents – sq33G

+0

@ sq33G - Cela fonctionne dans toutes les versions, mais il ne renvoie toujours pas un ** booléen **. Il renvoie un ensemble de résultats à une seule colonne contenant un ** bit **. Ce n'est pas la même chose. Vous ne pouvez pas faire 'IF CAST (1 AS BIT) ALORS ...'. Ma préférence est d'utiliser des paramètres de sortie plutôt que des ensembles de résultats à une rangée de colonnes uniques de toute façon. Les concepteurs '.NET' seront mappés à un booléen CLR. –

+2

J'ai compris. La plupart du temps, je n'utilise pas de procédures stockées dans SQL, mais plutôt pour renvoyer des données à .NET - donc avoir un * bit * plutôt qu'un booléen * logique ne fait pas beaucoup de différence pour moi. – sq33G

1

Vous avez au moins 2 options:

SELECT CONVERT(bit, 1) 
SELECT CAST(1 AS bit) 
Questions connexes