在这个 sql 函数中,我在 sql 服务器中遇到了一些错误
In this sql functionI i got some errors in sql server
我想 return 如果我的 table 中有记录,那么 return 它,如果 table 没有记录,那么 return 'America/Chicago'.
Error: Msg 102, Level 15, State 1, Procedure ufn_GetGCMoodleTimeZone,
Line 18 [Batch Start Line 7] Incorrect syntax near '@MoodleTimeZone'.
Msg 102, Level 15, State 1, Procedure ufn_GetGCMoodleTimeZone, Line 22
[Batch Start Line 7] Incorrect syntax near '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
关于使用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
将 return 单行或无行。
ISNULL()
将处理该结果,在 "no rows" 情况下,它将替换默认值 'America/Chicago'
。
这是一个工作数据库 Fiddle:
https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=f4c9e946475818e538ed8f63160d6971
我想 return 如果我的 table 中有记录,那么 return 它,如果 table 没有记录,那么 return 'America/Chicago'.
Error: Msg 102, Level 15, State 1, Procedure ufn_GetGCMoodleTimeZone, Line 18 [Batch Start Line 7] Incorrect syntax near '@MoodleTimeZone'. Msg 102, Level 15, State 1, Procedure ufn_GetGCMoodleTimeZone, Line 22 [Batch Start Line 7] Incorrect syntax near '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
关于使用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
将 return 单行或无行。 ISNULL()
将处理该结果,在 "no rows" 情况下,它将替换默认值'America/Chicago'
。
这是一个工作数据库 Fiddle:
https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=f4c9e946475818e538ed8f63160d6971