2

我创建了一个标量值函数,其中包含以下(部分)代码:

declare @start_time22 time(7);
select @start_time22=Courses.[Course start time] from Courses where [Course ID]=@val1 and [Course days]='monday wednesday';

if(@start_time22 is not null)
    begin
        IF (@start_time not between @start_time22 and @end_time22)
            BEGIN
                SET @Result = 1
            END
        ELSE
            BEGIN
                SET @Result = 0
            END
        IF (@end_time not between @start_time22 and @end_time22)
            BEGIN
                SET @Result = 1
            END
        ELSE
            BEGIN
                SET @Result = 0
            END
    end
else 
    begin
        set @Result = 5
    end


RETURN @Result

该函数总是返回值“ 5 ”,所以我想知道我是否可以首先比较类型时间......还是我的代码有问题???

4

1 回答 1

1

大概您希望查询是:

select @start_time22=Courses.[Course start time]
from Courses
where [Course ID]=@val1 and [Course days] in ('monday', 'wednesday');

正如评论基本上解释的那样,当您声明一个变量时,该值将设置为 NULL。如果要将其设置为另一个值,可以使用如下语法:

declare @str varchar(255) = 'My favorite string'

因为查询没有返回结果,所以变量永远不会被赋值。它保持为 NULL 值。

此外,您可以在查询本身中完成工作,使用case逻辑select而不是使用变量然后执行if逻辑:

select @result = (case when <whatever . . . )
from Courses
where [Course ID]=@val1 and [Course days] in ('monday', 'wednesday');
于 2012-12-19T14:14:01.860 回答