如何将比较结果存储到变量中

时间:2010-01-24 17:20:28

标签: tsql

我想打印一个简单的陈述 打印(1 = 1),我希望结果为TRUE或1但是sql server告诉我: '='附近的语法不正确。 那是为什么?

类似的声明会发生同样的事情

declare @test bit
set @test = (1=1)

总结如何在不使用IF语句的情况下“看到”从比较中返回的内容

更新:我问的原因是因为我正在尝试调试以下语句的原因

declare @AgingAmount smallint
set @AgingAmount = 500
select Amount, datediff(day,Batch.SubmitDate,getdate()) as Aging from myreporrt
where datediff(day,Batch.SubmitDate,getdate()) > @AgingAmount
即使老化300,

也会返回所有行     所以我想测试一下dateiff(day,datesubmited,getdate())> 500返回true或false但无法找到如何显示此比较结果的方法。

1 个答案:

答案 0 :(得分:6)

虽然SQL Server具有boolean类型的概念,并且它理解在booleanIF子句中解析为WHERE的表达式,但它不支持声明boolean个变量或参数。 bit数据类型无法直接存储boolean表达式的结果,即使它看起来很可疑。

离您最近的boolean数据类型是:

-- Store the result of a boolean test.
declare @result bit
select @result = case when <boolean expression> then 1 else 0 end

-- Make use of the above result somewhere else.
if @result = 1
    ...
else
    ...

为了增加混淆,SQL Server Management Studio在显示结果时会将bit视为boolean,而当将数据传回时,ADO.NET会将bit映射到System.Boolean。类推。

更新:要回答您的最新问题,请使用case when ... then 1 else 0 end声明中的select语法。