Bỏ qua để tới nội dung chính
Đăng nhập với Microsoft
Đăng nhập hoặc tạo một tài khoản.
Xin chào,
Chọn một tài khoản khác.
Bạn có nhiều tài khoản
Chọn tài khoản bạn muốn đăng nhập.

Triệu chứng

User-Defined Hàm (UDF) được thực thi trong Transact-SQL và trả về một giá trị dữ liệu duy nhất được gọi là Hàm User-Defined vô hướng T-SQL (UDFs). 

Tính năng Lập bản đồ UDF Scalar đã được giới thiệu trong Microsoft SQL Server 2019. Tính năng này có thể cải thiện hiệu suất truy vấn gọi UDF Vô hướng T-SQL trong đó thực thi UDF là nút cổ chai chính. Tính năng Định hướng UDF Vô hướng T-SQL tự động chuyển đổi UDF nội tuyến thành các biểu thức quan hệ. 

Bản cập nhật tích lũy (CU) này bao gồm một số bản sửa lỗi trong các tình huống trong đó truy vấn sử dụng Scalar UDF Inlining có thể trả về thông báo lỗi hoặc kết quả không mong muốn:

  • Lỗi không khớp loại xảy ra nếu loại trả về của UDF là dữ liệu sql_variant (được thêm vào SQL Server CU2 2019).

  • Gọi UDF từ lệnhsp_executesqlhủy thực thi (được thêm vào SQL Server CU2 2019).

  • UDFs tham chiếu nhãn không có lệnh liên GOTO trả về kết quả không chính xác (được thêm vào SQL Server 2019 CU2).

  • Điều kiện hết bộ nhớ và rò bộ nhớ xảy ra do UDF vô hướng rất lớn (được thêm vào SQL Server 2019 CU2).

  • Các biến không khởi tạo được sử dụng trong câu lệnh điều kiện (IF-ELSE) gây ra lỗi (được thêm vào SQL Server 2019 CU2).

  • Lỗi chuyển đổi rõ ràng xảy ra nếu UDF có tham số sql_variant(được thêm vào SQL Server CU7 năm 2019).

  • Lỗi xảy ra nếu tham chiếu hàm vô hướng CHECKSUM(được thêm vào SQL Server CU7 2019).

  • Gọi UDF có nhiều đánh giá lại biểu thức vô hướng có thể gây ra lỗi bộ lập lịch không mang lại lợi tức (được thêm vào SQL Server CU7 2019).

    Lưu ý: Bản sửa lỗi cho sự cố này đôi khi có thể gây ra tình trạng giảm hiệu suất. Để giảm thiểu tình trạng giảm hiệu suất này, bạn có thể tắt bản sửa lỗi ban đầu bằng cách bật cờ theo dõi (TF) 13156.

    Microsoft đang tìm cách khắc phục cho tình trạng giảm hiệu suất này sẽ sẵn dùng trong một CU trong tương lai.

  • Lỗi xảy ra nếu truy vấn tham chiếu UDF sử OPTION (RECOMPILE)(được thêm vào SQL Server CU7 2019).

  • Lỗi về quyền xảy ra nếu các dạng xem gọi UDF được inlined (được thêm vào SQL Server CU9 2019).

  • Vi phạm truy nhập xảy ra nếuquery_tsql_scalar_udf_inlinedsử dụng XEvent (được thêm vào SQL Server 2019 CU9).

  • Hành vi không nhất quán xảy ra vì Scalar UDF Inlining không tôn trọng gợi ý truy vấn QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n(được thêm vào SQL Server 2019 CU9).

  • Inlining UDFs contain aggregations that can cause non-yielding scheduler errors (added in SQL Server 2019 CU9).

  • Lỗi hết bộ nhớ xảy ra do một chuỗi các thao tác vô hướng trên cùng một biến trong các khối có điều kiện (được thêm vào SQL Server 2019 CU9).

  • Sau khi bạn nâng cấp lên CU9, vi phạm truy nhập sẽ xảy ra nếu một đối tượng gọi UDF không thể tuyến tính vô hướng (UDF1) có UDF không thể tuyến tính vô hướng (UDF2) được sử dụng làm tham số đầu vào (được thêm vào SQL Server 2019 CU11).

  • Việc tạo UDF có thể gây ra lỗi và tạo mã lỗi 6846, 1011 và 107 (được thêm vào SQL Server 2019 CU11).

  • Việc inlining UDFs chạy dưới dạng tài khoản không phải sysadmin có thể trả về thông báo lỗi "Đã xảy ra lỗi nghiêm trọng trên lệnh hiện tại.  Kết quả, nếu có, nên được loại bỏ" (được thêm vào SQL Server CU16 2019).

  • Vi phạm truy nhập xảy ra nếu bảng tạm thời được gọi bên trong UDFs bằng cách sử dụng các từ đồng nghĩa (được thêm vào Microsoft SQL Server 2022 CU1 và SQL Server 2019 CU19).

  • Vi phạm truy nhập xảy ra nếu định nghĩa UDF chỉ chứa nhãn GOTO và câu lệnhRETURN (được thêm vào SQL Server 2022 CU1 và SQL Server 2019 CU19).

  • Scalar UDF trả về kết quả ở các định dạng ngày và giờ khác nhau khi bật tính năng Lập bản đồ UDF Vô hướng (được thêm vào SQL Server 2022 CU3 và SQL Server 2019 CU20).

  • Tệp kết xuất được tạo nếu truy vấn có mệnh đề GROUP BY sử dụng UDF được inlined trong câu lệnh SELECT mà không có hàm tổng hợp (được thêm vào SQL Server 2022 CU12 và SQL Server 2019 CU26).

  • Lỗi "Đã vượt quá quy trình lưu trữ, chức năng, kích hoạt hoặc xem mức lồng tối đa (giới hạn 32)" xảy ra nếu tính năng Lập bản đồ UDF Vô hướng được bật, ngay cả khi không vượt quá mức lồng (được thêm vào SQL Server 2022 CU12 và SQL Server 2019 CU26).

  • Hỏng bộ nhớ xảy ra sqllang.dll!CProchdr::FDeriveInlineabilityOfScalarUdf nếu tính năng Lập bản đồ UDF Scalar được bật (được thêm vào SQL Server 2022 CU12 và SQL Server 2019 CU26).

Bản cập nhật tích lũy này cũng chặn việc viết tay trong các trường hợp sau:

  • Nếu UDF tham chiếu đến một số hàm nội tại nhất định (ví dụ: @@ROWCOUNT) có thể làm thay đổi kết quả khi UDF được inlined (được thêm vào cu2 SQL Server 2019).

  • Khi hàm tổng hợp được truyền như tham số vào UDF vô hướng (được thêm vào SQL Server CU2 2019).

  • Nếu UDF tham chiếu các dạng xem tích hợp sẵn (ví dụ: OBJECT_ID) (được thêm vào SQL Server 2019 CU2).

  • Nếu UDF sử dụng các phương pháp XML (được thêm vào SQL Server CU4 2019).

  • Nếu UDF chứa một câu lệnh SELECTsử dụng mệnh đềORDER BYnhưng không chứa TOP 1(được thêm vào SQL Server CU4 năm 2019).

  • Nếu câu lệnhSELECT thực hiện bài tập cùng với mệnh đề ORDER BY (ví dụ: SELECT @x = @x +1 FROM table ORDER BY column_name) (được thêm vào cu4 SQL Server 2019).

  • Nếu UDF chứa nhiều câu lệnh RETURN (được thêm vào SQL Server CU5 2019).

  • Nếu UDF được gọi từ một câu lệnh RETURN (được thêm vào SQL Server CU5 2019).

  • Nếu UDF tham chiếu đến hàm STRING_AGG (được thêm vào SQL Server CU5 2019).

  • Nếu định nghĩa UDF tham chiếu bảng từ xa (được thêm vào SQL Server CU6 2019).

  • Nếu truy vấn gọi UDF sử dụng GROUPING SETS, CUBE, hoặc ROLLUP (được thêm vào SQL Server CU6 năm 2019).

  • Nếu truy vấn gọi UDF có chứa biến được sử dụng làm tham số UDF để gán (ví dụ: SELECT @y=2, @x=UDF(@y)) (được thêm vào SQL Server 2019 CU6).

  • Nếu UDF tham chiếu các cột được mã hóa (được thêm vào SQL Server CU11 2019).

  • Nếu UDF chứa tham chiếu đến WITH XMLNAMESPACES(được thêm vào SQL Server CU11 2019).

  • Nếu truy vấn kích hoạt UDF có Biểu thức Bảng Phổ biến (CTEs) (được thêm vào SQL Server 2019 CU11).

  • Nếu định nghĩa UDF chứa bảng tạm thời hoặc từ đồng nghĩa cho bảng tạm thời (được thêm vào SQL Server 2022 CU1 và SQL Server 2019 CU19).

  • Nếu định nghĩa UDF có một câu lệnhSELECTcùng với một mệnh đềDISTINCTtrên nhiều cột bài tập (được thêm vào SQL Server 2022 CU4 và SQL Server 2019 CU20).

  • Nếu UDF chứa một câu lệnh SELECT sử dụng mệnh đề TABLESAMPLE PERCENT và nhiều nhiệm vụ biến đổi (được thêm vào SQL Server 2022 CU7).

  • Nếu một truy vấn INSERT tồn tại trên bảng được tham chiếu bởi dạng xem được lập chỉ mục có chứa UDF (được thêm vào SQL Server 2022 CU12 và SQL Server 2019 CU26).

Sau khi nâng cấp lên SQL Server 2019 CU2 nhưng trước khi nâng cấp lên SQL Server 2019 CU5, bạn nên đánh giá lại xem UDF có đủ điều kiện để inlining hay không. Để thực hiện điều này, hãy làm mới UDF vô hướng đủ điều kiện thông qua một trong các phương pháp sau:

  • Chạy sp_refreshsqlmodule các UDF vô hướng có thể áp dụng. Để biết thêm thông tin về quy trình lưu trữ hệ thống này, sp_refreshsqlmodule (Transact-SQL).

  • Thay đổi hoặc tạo lại UDF vô hướng hiện có bằng cách sử dụng định nghĩa, quyền và đặt thuộc tính hiện có. Để biết thêm thông tin, hãy xem ALTER FUNCTION (Transact-SQL).

Lệnh sau đây tạo ra một tập lệnh để làm mới siêu dữ liệu của bất kỳ UDF vô hướng được gạch dưới dạng hiện có:

/*

Generates a script that can be used to refresh all active inlineable scalar UDFs.

Note The sp_refreshsqlmodule command does not affect any permissions, extended properties, or SET options that are associated with the object.

*/

SELECT 'EXECUTE sys.sp_refreshsqlmodule ''[' + OBJECT_SCHEMA_NAME(object_id) + +'].' + '[' + OBJECT_NAME(object_id)

+ ']'';' AS 'RefreshStatement'

FROM sys.sql_modules

WHERE is_inlineable = 1

AND inline_type = 1;

GO

Lưu ý: Sau khi bạn nâng cấp lên SQL SERVER CU5 2019, chúng tôi sẽ tự động tiếp tục phát sinh tính không thích hợp của UDF trong khi biên soạn.

Giải pháp

Sự cố này đã được khắc phục trong các bản cập nhật tích lũy sau đây SQL Server:

Mỗi bản cập nhật tích lũy mới dành cho SQL Server sẽ chứa tất cả các bản cập nhật nóng và tất cả các bản sửa lỗi bảo mật được bao gồm trong bản cập nhật tích lũy trước đó. Xem các bản cập nhật tích lũy mới nhất dành cho doanh SQL Server:

Trạng thái

Microsoft đã xác nhận rằng đây là sự cố trong các sản phẩm của Microsoft được liệt kê trong mục "Áp dụng cho".

Tham khảo

Tìm hiểu về thuật ngữ mà Microsoft sử dụng để mô tả các bản cập nhật phần mềm.

Bạn cần thêm trợ giúp?

Bạn muốn xem các tùy chọn khác?

Khám phá các lợi ích của gói đăng ký, xem qua các khóa đào tạo, tìm hiểu cách bảo mật thiết bị của bạn và hơn thế nữa.

Cộng đồng giúp bạn đặt và trả lời các câu hỏi, cung cấp phản hồi và lắng nghe ý kiến từ các chuyên gia có kiến thức phong phú.

Thông tin này có hữu ích không?

Bạn hài lòng đến đâu với chất lượng dịch thuật?
Điều gì ảnh hưởng đến trải nghiệm của bạn?
Khi nhấn gửi, phản hồi của bạn sẽ được sử dụng để cải thiện các sản phẩm và dịch vụ của Microsoft. Người quản trị CNTT của bạn sẽ có thể thu thập dữ liệu này. Điều khoản về quyền riêng tư.

Cảm ơn phản hồi của bạn!

×