0

我在 SQL 中创建自己的函数时遇到问题。我收到错误 #1064 - 第 10 行的语法错误(带有“创建函数”的行),我不知道我做错了什么?

create table students (
id int primary key,
name varchar(30),
surname varchar(30),
class char(4),
born datetime,
grade varchar(10)
)

create function returnGrade
(@class char(4))
return varchar(10)
AS
BEGIN
declare @return varcahr(10)
@class = SUBSTRING(@class, 2, 1)
  SELECT @return = CASE @class
  WHEN '1' then 'first'
  WHEN '2' then 'second'
  WHEN '3' then 'third'
  WHEN '4' then 'fourth'
  ELSE 'unknown'
  END
return @return
END

PS 变量类如下所示:'T3.A'、'T4.A'、'T4.B' 等。

4

4 回答 4

0

由于您没有提到我假设它为 SQL Server 的数据库。

您的代码中有几个拼写错误。

这是更正

create function returnGrade
(@class char(4))
returns varchar(10) -- returns not return
AS
BEGIN
declare @return varchar(10)   -- varchar not varcahr
set @class = SUBSTRING(@class, 2, 1)  -- set was missing
  SELECT @return = CASE @class
  WHEN '1' then 'first'
  WHEN '2' then 'second'
  WHEN '3' then 'third'
  WHEN '4' then 'fourth'
  ELSE 'unknown'
  END
return @return
END

上面的代码编译得很好并且也返回了值。

select dbo.returngrade('A2')
于 2012-04-19T01:34:43.237 回答
0

以下对我有用。

CREATE TABLE students
    (
      id INT PRIMARY KEY ,
      name VARCHAR(30) ,
      surname VARCHAR(30) ,
      class CHAR(4) ,
      born DATETIME ,
      grade VARCHAR(10)
    )

GO -- Added GO


CREATE FUNCTION returnGrade ( @class CHAR(4) )
RETURNS VARCHAR(10) -- Changed to RETURNS from RETURN
AS 
    BEGIN
        DECLARE @return VARCHAR(10) -- Corrected the typo varcahr
        SET @class = SUBSTRING(@class, 2, 1) -- Added SET
        SELECT  @return = CASE @class
                            WHEN '1' THEN 'first'
                            WHEN '2' THEN 'second'
                            WHEN '3' THEN 'third'
                            WHEN '4' THEN 'fourth'
                            ELSE 'unknown'
                          END
        RETURN @return
    END

GO
于 2012-04-19T03:24:49.883 回答
0

请尝试如下,在您的声明中返回(s)丢失。

create function returnGrade
(
    @class char(4)
)
returns varchar(10)
AS
BEGIN
    declare @return varchar(10)
    set @class = SUBSTRING(@class, 2, 1)
      SELECT @return = CASE @class
      WHEN '1' then 'first'
      WHEN '2' then 'second'
      WHEN '3' then 'third'
      WHEN '4' then 'fourth'
      ELSE 'unknown'
    END

    return @return
END
于 2012-04-19T00:29:11.073 回答
0

你的代码: declare @return varcahr(10)

拼写错误和使用保留字。

declare @ret varchar(10)

于 2012-04-19T00:25:16.993 回答