Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server T-SQL默认变量值_Sql Server_Tsql - Fatal编程技术网

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”。)