函数的SQL语法

Bil*_*ill -3 sql sql-server

我有以下代码,语法某处不正确,

CREATE FUNCTION [dbo].[Greeting](@Name [varchar])
RETURNS [int] AS 
BEGIN
    Declare @Gender  varchar
    Declare @Greeting  varchar
    select @Gender =  Gender from [NameData].[dbo].[Names] where Name = @Name 
    select @Greeting = (case when @Gender = 'Female' then 'Ms.' else 'Mr.');
    RETURN @Greeting
END

GO
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

Incorrect syntax near ')'.
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

谢谢

Gor*_*off 6

你错过了end你的case陈述.可能更重要的是,您没有使用长度规格varchar.在SQL Server中始终使用长度规范.默认值取决于上下文 - 在此上下文中,值为1,这将产生不正确的结果.

您还应该用分号结束语句.并且,修复返回值,因为您似乎没有返回整数.所以:

CREATE FUNCTION [dbo].[Greeting](
    @Name varchar(255)
)
RETURNS varchar(255) AS 
BEGIN
    Declare @Gender varchar(255);
    Declare @Greeting  varchar(255);
    select @Gender = Gender from [NameData].[dbo].[Names] where Name = @Name ;
    select @Greeting = (case when @Gender = 'Female' then 'Ms.' else 'Mr.' end);
    RETURN @Greeting;
END;
Run Code Online (Sandbox Code Playgroud)

你确实意识到所有未被识别的名字都将被给予"先生"的"问候".我认为那是故意的.此外,该功能可以简化,但我尽可能地遵循您的原始逻辑.