Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Khi nào bạn sẽ sử dụng một hàm giá trị bảng?

Các hàm có giá trị bảng là các dạng xem được tham số hóa "chỉ". Điều này làm cho chúng cực kỳ mạnh mẽ để đóng gói logic mà nếu không sẽ bị ẩn đằng sau một thủ tục được lưu trữ không rõ ràng. Đây là một ví dụ:

Chức năng có giá trị trong bảng nội tuyến:

create function dbo.GetClients (
    @clientName nvarchar(max) = null
)
returns table
return (
    select *
    from dbo.Clients as a
    where ((a.ClientName = @clientName) or a.ClientName is null)
);

Quy trình được lưu trữ:

create procedure dbo.usp_GetClients (
    @clientName nvarchar(max) = null
)
as
begin;
    select *
    from dbo.Clients as a
    where ((a.ClientName = @clientName) or a.ClientName is null)
end;

Không giống như lệnh gọi thủ tục được lưu trữ, một hàm có giá trị bảng cho phép tôi soạn logic từ dbo.GetClients với các đối tượng khác:

select *
from dbo.GetClients(N'ACME') as a
join ... as b
    on a.ClientId = b.ClientId

Trong những tình huống như vậy, tôi không thể tưởng tượng việc sử dụng một thủ tục được lưu trữ vì nó hạn chế như thế nào khi so sánh với hàm có giá trị bảng. Tôi buộc phải điều chỉnh dữ liệu xung quanh mình bằng cách sử dụng bảng tạm thời, biến bảng hoặc lớp ứng dụng để kết hợp các kết quả từ nhiều đối tượng.

Các hàm có giá trị bảng nội tuyến đặc biệt tuyệt vời vì bit "nội tuyến" có lẽ được giải thích tốt nhất ở đây. Điều này cho phép trình tối ưu hóa xử lý các chức năng như vậy không khác gì các đối tượng mà chúng đóng gói, dẫn đến các kế hoạch hiệu suất gần như tối ưu (giả sử rằng chỉ mục và thống kê của bạn là lý tưởng).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ảnh chụp nhanh cơ sở dữ liệu SQL Server -3

  2. Cách nhận tổng tích lũy

  3. ADO.NET gọi Thủ tục lưu trữ T-SQL gây ra SqlTimeoutException

  4. Cách lấy danh sách tất cả các Ràng buộc Kiểm tra trong Cơ sở dữ liệu SQL Server - Hướng dẫn SQL Server / TSQL Phần 85

  5. Gói SSIS không muốn tìm nạp siêu dữ liệu của bảng tạm thời