Sql server T-SQL默认变量值
我知道这很简单,但我似乎无法在网上找到答案。以这段代码为例Sql server T-SQL默认变量值,sql-server,tsql,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
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年的日期范围内,则此硬编码部分将该年份指定为2005年。否则嗯,我不知道
我尝试添加一个print语句来打印值,但T-SQL引擎只是跳过了代码。那么,如果上面的if语句没有执行,它的值是多少呢?它能被描述为有价值吗
那么,如果上面的if语句没有执行,它的值是多少呢
如果If
语句的条件为false并且因此未执行set@year=2005
,@year
将保留它在If
语句之前的任何值。由于代码段中没有其他set@year
语句,@year
将保留在声明点分配的值。由于declare@year
语句没有为变量指定初始值,@year
因此将为NULL
它能被描述为有价值吗
<>这取决于你是否从技术角度考虑NULL值。在这一点上没有达成普遍共识。如果您认为它是一个未定义的值,那么是的,@year
仍然可以说有一个值。(事实上,一个变量可以说总是有一个值。)但是,如果您更愿意将NULL视为没有值,那么答案显然是“否”
在PRINT语句的帮助下,您无法看到它是NULL的原因是NULL没有被打印出来。更具体地说,
PRINT
会生成一个空行,正如您在评论中已经被告知的那样。您是否尝试过将PRINT语句打印为null(CONVERT(varchar,@OrderDate),“None”)。打印空值很难看到(空行)@Kamal:不,我现在就试试。我试着打印一个字符串,说“year:”,然后将其与year值连接起来,但这跳过了sql中的整行string+NULL=NULL-server@Kamal:啊,我不知道。这是有道理的。但是你是在问@year
还是@orderdate
?我知道你问的是前者。它的默认值是NULL
,与任何其他未赋值变量一样。这:declare@year int;打印为空(@year,12345)代码>打印“12345”。)