我有一个简单的查询,我想做的就是检查这个变量是真还是假,并且由于某种原因它总是返回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
答案 0 :(得分:15)
SQL Server中的bit
变量可以有三个值。 0
,1
和NULL
。
字符串'true'
和'false'
分别映射到1
和0
。
您的代码未考虑第三个可能的值。如果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)