Trong SQL Server, hàm giá trị bảng nhiều câu lệnh là một trong hai loại hàm giá trị bảng Transact-SQL (loại còn lại là hàm giá trị bảng nội tuyến).
Các hàm có giá trị bảng (TVF) là một loại hàm do người dùng định nghĩa trả về kết quả của chúng dưới dạng bảng. Do đó, chúng có thể được truy vấn giống như một bảng bình thường.
Các TVF nhiều câu lệnh (đôi khi được gọi là MSTVF) có thể bao gồm nhiều câu lệnh, kết quả của chúng được lưu trữ trong một biến trả về. Bạn bao gồm các thông số kỹ thuật của biến trả về ở đầu hàm. Điều này chỉ định cấu trúc của bảng trả về. Nói cách khác, bạn chỉ định bao nhiêu cột, tên của chúng, kiểu dữ liệu, v.v.
Điều này trái ngược với TVF nội tuyến (còn được gọi là ITVF), không sử dụng biến trả về (bảng trả về được xác định bởi SELECT
tuyên bố).
MSTVF cũng sử dụng BEGIN
/ END
cú pháp, là một thứ khác giúp phân biệt chúng với ITVF (ITVF không sử dụng cú pháp đó).
Ví dụ về hàm đa giá trị trong bảng sao kê
Dưới đây là một ví dụ về MSTVF cơ bản:
CREATE FUNCTION dbo.udf_PetsByName_MSTVF( @PetName varchar(70)) RETURNS @pets TABLE ( PetId varchar(20), PetName varchar(70) ) AS BEGIN INSERT INTO @pets SELECT CONCAT('Cat', ' ', CatId), CatName FROM dbo.Cats WHERE CatName = @PetName; INSERT INTO @pets SELECT CONCAT('Dog', ' ', DogId), DogName FROM dbo.Dogs WHERE DogName = @PetName; IF @@ROWCOUNT = 0 BEGIN INSERT INTO @pets VALUES ( '', 'There are no pets of that name.' ) END RETURN; END; GO
Ở đây, tôi bắt đầu hàm bằng cách xác định biến trả về có tên là @pets
. Nó thuộc loại bảng và nó sẽ trả về hai cột.
Trong trường hợp này, tôi có hai SELECT
câu lệnh và một IF
tuyên bố. Kết quả của mỗi kết quả được lưu trữ trong biến trả về. Điều này được thực hiện thông qua INSERT
tuyên bố mỗi lần.
Tùy chọn chức năng
Bạn cũng có thể chỉ định những thứ như, có hay không sử dụng liên kết lược đồ (bạn có thể nên) và có mã hóa hàm hay không.
Liên kết lược đồ sẽ ngăn chặn bất kỳ thay đổi bất lợi nào được thực hiện đối với các đối tượng cơ bản mà hàm phụ thuộc vào (chẳng hạn như giảm bảng, thay đổi cột, v.v.).
Mã hóa sẽ chuyển đổi định nghĩa của hàm sang định dạng khó hiểu (để ngăn người khác đọc được).
Xem Tạo một hàm đa giá trị trong bảng để biết các ví dụ về cách thêm liên kết và mã hóa giản đồ vào ITVF.