在这个sql函数中,我在sqlserver中遇到了一些错误

vohkndzv  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(396)

如果我的表中有记录,我想返回它,如果该表没有记录,则返回“america/chicago”。
错误:msg 102,级别15,状态1,过程ufn\u getgcmoodletimezone,第18行[batch start line 7]靠近“@moodletimezone”的语法不正确。msg 102,级别15,状态1,过程ufn\u getgcmoodletimezone,第22行[batch start line 7]靠近“end”的语法不正确。

ALTER FUNCTION [dbo].[ufn_GetGCMoodleTimeZone]
 ( @HSATimeZone VARCHAR(250) )RETURNS varchar(250)
AS
  BEGIN
    DECLARE @MoodleTimeZone varchar(250) 
    SELECT @MoodleTimeZone = GCMoodleTimeZoneMap.MoodleTimeZone
    FROM GCMoodleTimeZoneMap
    WHERE GCMoodleTimeZoneMap.HSATimeZone = @HSATimeZone
    IF @MoodleTimeZone='NULL'
    BEGIN
            @MoodleTimeZone='America/Chicago'
    END 
    RETURN @MoodleTimeZone

  END
xghobddn

xghobddn1#

关于使用set和如何检查null的注解是正确的,因此我将不再重复。不过,您想要的内容可以写得更短,效率更高,如下所示:

ALTER FUNCTION [dbo].[ufn_GetGCMoodleTimeZone]
 ( @HSATimeZone VARCHAR(250) )RETURNS varchar(250)
AS
BEGIN
  RETURN ISNULL(
      (SELECT TOP 1 MoodleTimeZone
       FROM   GCMoodleTimeZoneMap
       WHERE  HSATimeZone = @HSATimeZone
      ), 'America/Chicago'
    )
END

说明:
内在的 SELECT 将返回单行或无行。
这个 ISNULL() 将处理该结果,在“无行”情况下,它将替换默认值 'America/Chicago' .
这是一把正在工作的小提琴:
https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=f4c9e946475818e538ed8f63160d6971

相关问题