2010-09-29 58 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)