2010-09-29 4 views
16

Próbuję ustalić, jak napisać procdure sklepu, który zwraca wartość boolowską. Zacząłem pisać następującą, która zwraca int.Jak zwrócić bool z przechowywanego procesu

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 

Nie jestem jednak pewien, jak napisać jeden, aby zwrócić wartość boolowską.

Czy ktoś może pomóc? Czy to trochę wartość?

+0

Co baza danych używasz? – RedFilter

Odpowiedz

29

Nie możesz. Nie ma boolowskiego typu danych, a kod powrotu procedury może być tylko int. Możesz jednak zwrócić parametr bit jako parametr wyjściowy.

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

I to nazwać

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

W zależności od tego, co robisz, możesz zamiast tego użyć funkcji. –

+1

Dzięki za odpowiedź! –

16

Użyj tego:

SELECT CAST(1 AS BIT)

+0

Działa dla SQL 2012, nie wiem o poprzednim – sq33G

+0

@ sq33G - Działa we wszystkich wersjach, ale nadal nie zwraca wartości ** boolean **. Zwraca zestaw wyników pojedynczego wiersza z jedną kolumną zawierający ** bit **. To nie to samo. Nie możesz wykonać 'IF CAST (1 AS BIT) THEN ...'. Moim preferencją jest użycie parametrów wyjściowych, a nie pojedynczych kolumn wyników pojedynczego wiersza tak czy inaczej. Projektanci .NET 'będą mapować do Boolean CLR. –

+2

Mam to. Najczęściej nie używam procedur przechowywanych w SQL, ale raczej zwracam dane do .NET - więc posiadanie * bit * zamiast logicznego * boolean * nie ma dla mnie dużej różnicy. – sq33G

1

masz co najmniej 2 opcje:

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