2010-09-29 61 views
16

我正在努力解决如何编写一个返回布尔值的存储过程。我开始写下面这个返回int。如何从存储过程返回布尔值

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 

但我不确定如何写一个返回布尔值。

有人可以帮忙吗?这有点价值吗?

+0

您正在使用什么数据库? – RedFilter 2010-09-29 20:36:49

回答

29

你不能。没有布尔数据类型,并且过程返回码只能是int。不过,您可以返回一个bit作为输出参数。

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

,并呼吁它

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

根据你在做什么,你可以改用一个函数。 – 2010-09-29 20:39:40

+1

感谢您的回答! – 2010-09-30 01:57:07

16

使用此:

SELECT CAST(1 AS BIT)

+0

适用于SQL 2012,不知道以前的 – sq33G 2014-03-11 13:02:17

+0

@ sq33G - 它适用于所有版本,但它仍然不返回**布尔值**。它返回包含**位**的单列单行结果集。它们不是同一件事。你不能做'如果CAST(1 AS BIT)然后...'。无论如何,我的首选是使用输出参数而不是单列单行结果集。 '''.NET'设计者将映射到一个CLR布尔值。 – 2014-03-11 13:21:37

+2

明白了。大多数情况下,我并没有在SQL中使用存储过程,而是将数据返回给.NET,因此拥有*位*而不是逻辑*布尔*对我来说没有多大的作用。 – sq33G 2014-03-12 07:48:48

1

你至少有2种选择:

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