[英]user-Defined SQL Function gives error “Invalid column name 'Employee_Name'.”
[英]User Defined Functions - Northwind Database - Employee_Name function
我正在完成一項任務並發現了一些麻煩。 這是作業:
此分配將使用northwind數據庫和Employees表。
這將是表用戶定義的函數。
創建名為Employee_Name的用戶定義函數。 傳遞Employee Id作為參數。
返回ID與傳遞給用戶定義函數的id匹配的員工的名字,姓氏和電話號碼。
創建一個使用該函數的查詢,並返回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 FUNCTION
和SELECT * ...
作為單獨的查詢或在它們之間插入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.