簡體   English   中英

用戶定義的函數 - Northwind數據庫 - Employee_Name函數

[英]User Defined Functions - Northwind Database - Employee_Name function

我正在完成一項任務並發現了一些麻煩。 這是作業:

此分配將使用northwind數據庫和Employees表。

這將是表用戶定義的函數。

  1. 創建名為Employee_Name的用戶定義函數。 傳遞Employee 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'.

您必須單獨創建該功能並使用它。 在開始處理#3之前運行CREATE語句。
從技術上講,您也可以在示例代碼中的最終SELECT之前插入一個GO ,它應該可以正常工作。

您的函數未創建,因為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必須在一個單獨的批處理中。

嘗試這個:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM