我知道这很简单,但我似乎无法在网上找到答案。拿这段代码。
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语句没有被执行,那么是它的值是什么?它可以被描述为有价值吗?
答案 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>
会产生一个空白行,正如您在评论中已经告知过的那样。