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

Tạo CHẾ ĐỘ XEM được tham số hóa trong SQL Server 2008

Hãy thử tạo một hàm có giá trị bảng nội tuyến. Ví dụ:

CREATE FUNCTION dbo.fxnExample (@Parameter1 INTEGER)
RETURNS TABLE
AS
RETURN
(
    SELECT Field1, Field2
    FROM SomeTable
    WHERE Field3 = @Parameter1
)

-- Then call like this, just as if it's a table/view just with a parameter
SELECT * FROM dbo.fxnExample(1)

Nếu bạn xem kế hoạch thực thi cho SELECT, bạn sẽ không thấy đề cập đến hàm và thực sự sẽ chỉ hiển thị cho bạn các bảng bên dưới đang được truy vấn. Điều này là tốt vì nó có nghĩa là thống kê trên các bảng bên dưới sẽ được sử dụng khi tạo kế hoạch thực thi cho truy vấn.

Điều cần tránh là một hàm có giá trị trong bảng nhiều câu lệnh vì thống kê bảng bên dưới sẽ không được sử dụng và có thể dẫn đến hiệu suất kém do kế hoạch thực thi kém.
Ví dụ về những điều cần tránh :

CREATE FUNCTION dbo.fxnExample (@Parameter1 INTEGER)
    RETURNS @Results TABLE(Field1 VARCHAR(10), Field2 VARCHAR(10))
AS
BEGIN
    INSERT @Results
    SELECT Field1, Field2
    FROM SomeTable
    WHERE Field3 = @Parameter1

    RETURN
END

Khác biệt một chút, nhưng có sự khác biệt lớn về hiệu suất khi hàm được sử dụng trong một truy vấn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách bỏ tất cả các Khóa chính khỏi tất cả các bảng trong Cơ sở dữ liệu SQL Server - Hướng dẫn SQL Server / TSQL Phần 65

  2. Cài đặt Tiện ích mở rộng tác nhân SQL Server trên Azure Data Studio

  3. Lỗi chuyển đổi dữ liệu tải hàng loạt (loại ký tự không khớp hoặc không hợp lệ cho mã hóa được chỉ định) cho hàng 1, cột 4 (Năm)

  4. Khắc phục Msg 8116 “Ngày kiểu dữ liệu đối số không hợp lệ cho đối số 1 của hàm chuỗi con” trong SQL Server

  5. Trong SQL Server, làm cách nào để tạo câu lệnh CREATE TABLE cho một bảng nhất định?