2010-01-24 42 views
6

我想打印一个简单的语句 print(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 老化,所以我想测试是否datedi ff(day,datesubmited,getdate())> 500返回true或false,但找不到如何显示比较结果的方法。

+1

您能否提供您正在尝试执行的确切查询的示例? – toddk 2010-01-24 17:22:02

+0

实际上我应该将此问题的标题更改为“如何在不使用if语句的情况下显示比较结果” – 2010-01-24 17:35:39

回答

6

虽然SQL Server有一个boolean类型的概念,它知道解析到booleanIFWHERE条款表述,它不支持声明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中把bitboolean显示结果时,和ADO.NET映射bitSystem.Boolean当来回传递数据时。

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

+1

请参阅http://msdn.microsoft.com/zh-cn/library/ms188074.aspx关于布尔型数据类型的“官方”确认不能被声明或赋值。 – mjv 2010-01-24 17:30:35

+0

Sheesh,但谢谢!用SQL Server回到石器时代 – Bart 2017-02-20 15:08:25

相关问题