【问题标题】:User Defined Functions - Northwind Database - Employee_Name function用户定义函数 - Northwind 数据库 - Employee_Name 函数
【发布时间】:2013-12-09 11:37:18
【问题描述】:

我正在执行一项任务,但遇到了一些麻烦。这是作业:

此分配将使用北风数据库和雇员表。

这将是一个用户定义的表函数。

  1. 创建一个名为 Employee_Name 的用户定义函数。将员工 ID 作为参数传递。

  2. 返回其 ID 与传递给用户定义函数的 id 匹配的员工的名字、姓氏和电话号码。

  3. 创建一个使用该函数并返回 id 为 5 的员工信息的查询。

到目前为止,这是我的解决方案:

CREATE FUNCTION dbo.Employee_Name(@employId int)
RETURNS TABLE
AS 
RETURN(
    SELECT FirstName,LastName,HomePhone 
    FROM dbo.Employees 
    WHERE EmployeeID = @employId
    GROUP BY EmployeeID
)

SELECT * FROM dbo.Employee_Name(5);
GO

这是我收到的错误:

Msg 156, Level 15, State 1, Procedure Employee_Name, Line 11
Incorrect syntax near the keyword 'SELECT'.

【问题讨论】:

  • 只是一个猜测,但您可能必须在函数中创建一个临时表,填充它,然后返回它。
  • Northwind 是 Microsoft SQL Server 的示例。 MySQL 标签是否适合这个问题?
  • @DanBracuk 我以为你不能在 UDF 中使用临时表?

标签: sql sql-server function tsql user-defined-functions


【解决方案1】:

你必须分开创建函数和使用它。在开始处理 #3 之前运行 CREATE 语句。
从技术上讲,您也可以在示例代码中的最后一个 SELECT 之前插入一个 GO,它应该可以正常工作。

【讨论】:

    【解决方案2】:

    你的函数没有被创建,因为 SELECT 语句:

    SELECT FirstName,LastName,HomePhone 
    FROM dbo.Employees 
    WHERE EmployeeID = @employId
    GROUP BY EmployeeID
    

    不正确(它在 SELECT 中包含 3 个字段,在 GROUP BY 中包含一个完全不同的字段)。

    事实上,您甚至不需要 GROUP BY,因为 EmployeeID 是一个唯一值。只需将您的函数创建为

    CREATE FUNCTION dbo.Employee_Name(@employId int)
    RETURNS TABLE
    AS 
    RETURN(
        SELECT FirstName,LastName,HomePhone 
        FROM dbo.Employees 
        WHERE EmployeeID = @employId
    )
    

    那么你的SELECT * FROM dbo.Employee_Name(5) 就可以了。

    是的,正如@KekuSemau 指出的那样,要么将CREATE FUNCTIONSELECT * ... 作为单独的查询运行,要么在它们之间插入GO - CREATE 必须在单独的批处理中。

    【讨论】:

    • 确实,我根本没看到GROUP BY
    【解决方案3】:

    试试这个:

    CREATE FUNCTION dbo.Employees_Name(@employeeID int)
    Returns Table
    AS
    Return(
       SELECT FirstName,LastName,PhoneNumber
       FROM dbo.Employees
       WHERE EmployeeID = @employID
       )
    
       GO
       SELECT * FROM dbo.Employees_Name(5)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      • 1970-01-01
      • 2012-07-25
      • 2020-12-04
      相关资源
      最近更新 更多