我可以声明一个不为null的局部变量吗?

时间:2014-04-06 22:49:13

标签: sql-server tsql

在T-SQL中,我声明一个局部变量用于某些查询,如:

DECLARE @var_last datetime;
SET @var_last = (SELECT TOP(1) col_date FROM tbl_dates ORDER BY col_date);

在我正在测试的应用程序中,此查询返回NULL将是一个错误,如果是,则查询返回崩溃错误是理想的。

我想将@var_last设为NOT NULL,但语法是......

DECLARE @var_last datetime NOT NULL;

...无效。我可以写一个查询返回的简单检查,看它是否为NULL,如果是,则出错,但我的问题是,是否不可能将局部变量声明为NOT NULL?

3 个答案:

答案 0 :(得分:3)

这是正确的,根据DECLARE @local_variable的文档,可在http://technet.microsoft.com/en-us/library/ms188927.aspx获取,它不接受NULL | NOT NULL参数 - 这些只有效用于列定义。

如果您想要在NULL返回时停止执行,请测试NULL,如果是,则RAISERROR;见:http://technet.microsoft.com/en-us/library/ms178592.aspx

答案 1 :(得分:1)

你可以这样做......

使用ISNULL()

SELECT TOP(1) @var_last = ISNULL(col_date,'19000101') --<-- Some default value
FROM tbl_dates 
ORDER BY col_date;

使用COALESCE()

SELECT TOP(1) @var_last = COALESCE(col_date,'19000101') --<-- Some default value
FROM tbl_dates 
ORDER BY col_date;

答案 2 :(得分:0)

无法将变量设置为NOT NULL,因为NULLNOT NULL是状态,而不是值(甚至可以将变量设置为NULL就像你正在设置一个值,但实际上你正在删除现有值。)

NULL,根据定义,意味着没有价值。