在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?
答案 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
,因为NULL
和NOT NULL
是状态,而不是值(甚至可以将变量设置为NULL
就像你正在设置一个值,但实际上你正在删除现有值。)
NULL,根据定义,意味着没有价值。