T-SQL默认变量值

时间:2014-12-01 13:54:31

标签: sql-server tsql

我知道这很简单,但我似乎无法在网上找到答案。拿这段代码。

 declare @year int      
 declare @orderdate datetime    
 set @orderdate = (select orderdate from [table] where [id = variable id])    
 if @orderdate between '01-Apr-2005 00:00' and '31-Mar-2006 23:59'    
  set @year = 2005    

如果该年份在该日期范围内,则此硬编码部分将指定年份为2005年。除此以外?好吧,我不知道。

我尝试添加print语句来打印出值,但是T-SQL引擎只是跳过了代码。那么如果上面的if语句没有被执行,那么是它的值是什么?它可以被描述为有价值吗?

1 个答案:

答案 0 :(得分:0)

  

如果上面的if语句没有被执行,它的价值是什么?

如果if语句的条件为false且set @year = 2005因此未执行,@year将保留if语句之前的任何值。由于您的代码段中没有其他set @year语句,@year将保留在声明点分配的值。由于declare @year语句未指定变量的初始值,因此@year将为NULL

  

是否可以将其描述为具有值?

嗯,从技术角度来看,这取决于你是否认为NULL是一个值。关于这一点,没有普遍的一致意见。如果您将其视为未定义值,那么是的,@year仍然可以说具有值。 (事实上​​,一个变量可以说是总是有一个值。)但是,如果您更喜欢将NULL视为缺少值,那么显然答案是"没有"。

在PRINT语句的帮助下,您无法看到它为NULL的原因是不打印NULL。更具体地说,PRINT <an expression that evaluates to NULL>会产生一个空白行,正如您在评论中已经告知过的那样。