函数的SQL语法

时间:2015-06-12 18:00:44

标签: 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

我得到的错误是:

Incorrect syntax near ')'.

任何人都可以提供帮助吗?

由于

3 个答案:

答案 0 :(得分:6)

您错过了foreach ($A->getAB() as $AB) { $AB->getB(); } 语句的end。可能更重要的是,您没有使用case的长度规格。在SQL Server 始终中使用长度规范。默认值取决于上下文 - 在此上下文中,值为1,这将产生不正确的结果。

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

varchar

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

答案 1 :(得分:2)

你有

/Users

但是正在尝试返回声明为varchar的@Greeting

并且还缺少案例陈述的结尾。

答案 2 :(得分:2)

您在案件陈述中遗漏了END

CREATE FUNCTION [dbo].[Greeting] (@Name [varchar(255)])
    RETURNS [int] --also this will need to be changed to varchar() 
    AS
    BEGIN
        DECLARE @Gender VARCHAR(255)   --added varchar length
        DECLARE @Greeting VARCHAR(255) --added varchar length

        SELECT @Gender = Gender
        FROM [NameData].[dbo].[Names]
        WHERE NAME = @Name

        SELECT @Greeting = (
                CASE 
                    WHEN @Gender = 'Female'
                        THEN 'Ms.'
                    ELSE 'Mr.'
                    END  --added this
                );
        RETURN @Greeting
    END
    GO