2010-09-29 36 views
16

Estoy tratando de averiguar cómo escribir una provisión de tienda que devuelve un valor booleano. Empecé escribiendo el siguiente que devuelve un int.Cómo devolver bool desde el proceso almacenado

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 

No estoy seguro cómo escribir uno para devolver un valor booleano.

¿Alguien puede ayudar? ¿Tiene un poco de valor?

+0

Qué base de datos está utilizando? – RedFilter

Respuesta

29

No puede. No hay ningún tipo de datos booleanos y el código de retorno del procedimiento solo puede ser int. Sin embargo, puede devolver un bit como parámetro de salida.

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

Y llamarlo

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

Dependiendo de lo que esté haciendo, podría usar una función en su lugar. –

+1

¡Gracias por la respuesta! –

16

Utilice esta:

SELECT CAST(1 AS BIT)

+0

Works para SQL 2012, no sé acerca de – sq33G

+0

@ sq33G anterior - Funciona en todas las versiones pero aún no devuelve ** boolean **. Devuelve un conjunto de resultados de fila única de una columna que contiene un ** bit **. No són la misma cosa. No se puede hacer 'IF CAST (1 AS BIT) THEN ...'. Mi preferencia es utilizar los parámetros de salida en lugar de los conjuntos de resultados de fila única de una sola columna de todos modos. Los diseñadores de '.NET' asignarán un booleano CLR. –

+2

Entendido. La mayoría de las veces, no utilizo procedimientos almacenados dentro de SQL, sino que devuelvo datos a .NET, por lo que tener un * bit * en vez de un * booleano lógico * no me hace mucha diferencia. – sq33G

1

de tener al menos 2 opciones:

SELECT CONVERT(bit, 1) 
SELECT CAST(1 AS bit) 
Cuestiones relacionadas