如何在sql server中检查位变量是真还是假?

时间:2013-12-09 14:48:07

标签: sql-server

我有一个简单的查询,我想做的就是检查这个变量是真还是假,并且由于某种原因它总是返回false。

DECLARE @CappedIFCheck BIT
SET @CappedIFCheck = (SELECT distinct 1
                      FROM mytable
                      WHERE 1=1);

select @CappedIFCheck
     IF (@CappedIFCheck = 'True')
        BEGIN
           SELECT 'true';
        END
     ELSE
        BEGIN
           SELECT 'false';
        END

3 个答案:

答案 0 :(得分:15)

SQL Server中的bit变量可以有三个值。 01NULL

字符串'true''false'分别映射到10

您的代码未考虑第三个可能的值。如果mytable为空,则该变量不会被初始化并且值为NULL

SELECT CASE @CappedIFCheck
         WHEN 'True' THEN 'true'
         WHEN 'False' THEN 'false'
         ELSE 'unknown'
       END 

我不确定你的代码到底要做什么,但这是一种非常低效的处理事情的方式。您应该使用EXISTS代替。

答案 1 :(得分:10)

比较Sql Server中的BIT值时,请使用文字值1和0,而不是“True”和“False”。

IF(@CappedIFCheck = 1)...

答案 2 :(得分:0)

尝试这样的set子句:

SET @CappedIFCheck = ISNULL((select 1 where exists (select 1 from MyTable where 1=0)),0)