Trong SQL Server, một UDF vô hướng, hoặc hàm vô hướng do người dùng xác định, là một hàm do người dùng xác định trả về một giá trị duy nhất.
Điều này trái ngược với một hàm có giá trị bảng, hàm này trả về một tập hợp kết quả ở dạng bảng.
Các hàm do người dùng định nghĩa có thể được viết dưới dạng UDF T-SQL hoặc UDF CLR (Common Language Runtime). CLR cho phép bạn tạo UDF trong mã được quản lý bằng bất kỳ ngôn ngữ lập trình .NET Framework nào. Các chức năng này sau đó có thể truy cập được vào T-SQL hoặc mã được quản lý khác.
Ví dụ 1 - UDF vô hướng cơ bản
Đây là ví dụ về mã được sử dụng để tạo UDF vô hướng T-SQL cơ bản.
TẠO CHỨC NĂNG dbo.ufn_discountPrice (@price DECIMAL (12,2), @discount DECIMAL (12,2)) QUAY LẠI KHOẢNG CÁCH (12,2) ASBEGIN RETURN @price * (1 - @discount); HẾT;UDF vô hướng này chấp nhận hai tham số;
@price
và@discount
. Chúng được chuyển vào hàm dưới dạng đối số bất cứ khi nào hàm được gọi. Hàm nhận giá trị của các đối số đó, thực hiện phép tính bằng cách sử dụng các giá trị đó, sau đó trả về giá trị kết quả. Trong trường hợp này, giá đã chiết khấu sẽ được trả lại.Ví dụ 2 - Gọi UDF
Khi UDF đã được tạo, nó có thể được gọi trong mã T-SQL bất kỳ lúc nào bạn cần.
Dưới đây là một ví dụ về cách gọi UDF:
CHỌN dbo.ufn_discountPrice (100, .2) AS Kết quả;Kết quả
+ ---------- + | Kết quả || ---------- || 80,00 | + ---------- +Bạn cũng có thể sử dụng UDF vô hướng trong các cột được tính toán. Điều này có thể đặc biệt hữu ích nếu bạn cần cột được tính toán để truy cập dữ liệu trong bảng khác.
Tùy chọn chức năng
Khi bạn tạo một UDF vô hướng, có nhiều tùy chọn khác nhau mà bạn có thể áp dụng cho hàm.
Ví dụ, bạn có thể chỉ định xem nó có nên bị ràng buộc lược đồ hay không. Bạn có thể chỉ định rằng nó phải được mã hóa. Bạn cũng có thể chỉ định một
EXECUTE AS
để chỉ định ngữ cảnh bảo mật mà theo đó chức năng do người dùng xác định được thực thi.Xem tài liệu của Microsoft để biết danh sách chi tiết các tùy chọn bạn có thể cung cấp khi tạo hoặc thay đổi một chức năng do người dùng xác định.
Kiểu dữ liệu tham số
Đối với các hàm T-SQL, tất cả các kiểu dữ liệu, bao gồm cả kiểu CLR do người dùng xác định và loại bảng do người dùng xác định, đều được phép ngoại trừ dấu thời gian và con trỏ nonscalar và bảng các loại.
Đối với các hàm CLR, tất cả các loại dữ liệu, bao gồm cả các loại CLR do người dùng xác định, đều được phép ngoại trừ văn bản , ntext , hình ảnh , các loại bảng do người dùng xác định, dấu thời gian kiểu dữ liệu và con trỏ không phân vùng và bảng các loại.
Loại dữ liệu trả về
Kiểu dữ liệu trả về cho UDF vô hướng T-SQL có thể là bất kỳ kiểu dữ liệu nào ngoại trừ dấu thời gian và con trỏ nonscalar và bảng các loại.
Các hàm CLR có thể sử dụng bất kỳ kiểu dữ liệu nào ngoại trừ văn bản , ntext , hình ảnh , dấu thời gian và con trỏ không phân vùng và bảng các loại.
Cả hai hàm T-SQL và CLR đều có thể có kiểu CLR do người dùng xác định cho giá trị trả về của nó.