Quy trình đã lưu trữ không được thiết kế cho kiểu sử dụng đó, vì nó có thể thực hiện các thao tác khác sau đó chọn dữ liệu, nó có thể hoạt động mà không cần trả lại dữ liệu hoặc có thể trả về các tập hợp khác nhau trong các tình huống khác nhau.
Không giống như các thủ tục được lưu trữ, các hàm hoàn toàn phù hợp để được sử dụng nội tuyến với các truy vấn khác.
Bạn có hai lựa chọn:
A) Tạo một hàm vô hướng sẽ chỉ trả về một TeacherID
và sử dụng nó trong WHERE
của bạn
CREATE FUNCTION udfGetTeacherID
(
@lessonId int, @groupId int
)
RETURNS int
AS
BEGIN
DECLARE @teacherId INT;
SELECT @teacherId = GroupTeachers.TeacherId
FROM GroupTeachers
WHERE [email protected] AND [email protected];
RETURN @teacherId;
END
GO
B) Tạo hàm giá trị bảng có thể cung cấp cho bạn tất cả dữ liệu cần thiết và bạn chỉ có thể tham gia (áp dụng) vào nó.
CREATE FUNCTION udfGetTeacherName
(
@lessonId int, @groupId int
)
RETURNS TABLE
AS
RETURN
(
SELECT t.TeacherLastName, t.TeacherFirstName, t.TeacherMiddleName
FROM Teachers t
INNER JOIN GroupTeachers g ON T.TeacherID = g.TeacherID
WHERE [email protected] AND [email protected]
)
GO
Đây là một số bài đọc: Sự khác biệt giữa Thủ tục được Lưu trữ và Chức năng trong SQL Server