Kết Quả Không Chính Xác Nếu Bạn Sử Dụng Dấu Ngoặc đơn Xung ...

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

Trên máy tính đang chạy Microsoft SQL Server 2008, hãy cân nhắc các kịch bản sau đây.

Tình huống 1

Bạn chỉ định một biểu thức bảng chung (CPC) bằng cách sử dụng câu lệnh với. Ví dụ, bạn chạy truy vấn sau đây.

WITH common_table_expression AS (SELECT * FROM sys.objects)(SELECT * FROM common_table_expression)

Sau đó, bạn chạy truy vấn này.

SELECT *FROM sys.dm_exec_query_statsWHERE statement_start_offset > statement_end_offsetANDstatement_end_offset <> -1

Trong trường hợp này, gói truy vấn được lưu trữ cho truy vấn này lưu trữ không chính xác statement_start_offset và các giá trị statement_end_offset. Cụ thể, bạn sẽ nhận thấy giá trị statement_end_offset nhỏ hơn giá trị statement_start_offset khi chạy sys.dm_exec_query_stats dạng xem quản lý động (trong). Vì vấn đề này, báo cáo hiệu suất có thể không thành công khi báo cáo giả định rằng giá trị statement_start_offset luôn nhỏ hơn giá trị statement_stop_offset.

Tình huống 2

Bạn chỉ định một biểu thức bảng chung bằng cách sử dụng câu lệnh WITH và bạn sử dụng tùy chọn tái biên dịch lại. Ví dụ, bạn tạo một hàm trong SQL Server 2008 bằng cách sử dụng các tập lệnh sau đây.

CREATE FUNCTION function1() RETURNS int ASBEGINDECLARE @x intSET @x=1;WITH common_table_expression AS (SELECT @x AS column1) (SELECT @x=column1 FROM common_table_expression) OPTION(RECOMPILE)RETURN @xEND

Khi bạn chạy một truy vấn "chọn dbo. function1 ()", bạn nhận được thông báo lỗi sau đây:

Một lỗi nghiêm trọng xảy ra trên lệnh hiện tại. Kết quả, nếu có, hãy loại bỏ.

Ngoài ra, lỗi này có thể xảy ra mà không cần tùy chọn tái biên dịch nếu máy chủ SQL đang gặp nặng lưu lượng truy cập máy chủ.

Kịch bản 3

Bạn chỉ định biểu thức bảng chung bằng cách sử dụng câu lệnh WITH. Trong câu lệnh WITH, bạn chỉ định một bảng không tồn tại. Ví dụ, bạn chạy truy vấn sau đây.

WITH computed_table (id) AS(SELECT id FROM this_table_does_not_exist) (SELECT id FROM dbo.computed_table) GO

Khi bạn chạy truy vấn này, bạn không nhận được lỗi cho bảng bị thiếu.

Nguyên nhân

Những vấn đề này xảy ra do việc xử lý trục trặc của một câu lệnh SELECT theo lời tuyên bố. Câu lệnh có sử dụng cú pháp sau đây.

WITH common_table_expression AS(CTE_query_definition)

Câu lệnh này sau đó tạo ra một tập kết quả được gán cho tên biểu thức bảng chung đã được xác định. Sau đó, bạn hãy làm theo câu lệnh này với một câu lệnh SELECT. Nếu câu lệnh thứ hai này được đính kèm trong dấu ngoặc đơn, sau đó bạn cố gắng thực hiện một thao tác trên kết quả hoặc cố gắng chạy một dạng xem quản lý động sys.dm_exec_query_stats, bạn nhận được kết quả không chính xác hoặc lỗi.

Giải pháp

Thông tin về gói dịch vụ Để giải quyết vấn đề này, có được gói dịch vụ mới nhất dành cho SQL Server 2008. Để biết thêm thông tin, hãy bấm vào số bài viết sau đây để xem bài viết trong Cơ sở Kiến thức Microsoft:

968382 Cách tải gói dịch vụ mới nhất cho SQL Server 2008

Cách giải quyết

Để làm việc xung quanh các vấn đề này, bạn phải loại bỏ dấu ngoặc đơn từ câu lệnh sau biểu thức bảng thông thường. Ví dụ, hãy cân nhắc những điều sau đây với câu lệnh sử dụng dấu ngoặc đơn.

WITH common_table_expression AS (SELECT *FROM sys.objects)(SELECT * FROM common_table_expression)

Để làm việc xung quanh các vấn đề này, hãy thay đổi những điều sau đây bằng câu lệnh không sử dụng các dấu ngoặc đơn này.

WITH common_table_expression AS (SELECT *FROM sys.objects)SELECT * FROM common_table_expressio

Trạng thái

Microsoft đã xác nhận rằng đây là sự cố trong các sản phẩm Microsoft được liệt kê trong phần "áp dụng cho". Sự cố này lần đầu tiên được sửa trong SQL Server 2008 gói dịch vụ 2 (SP2).

Thông tin Bổ sung

Để biết thêm thông tin về cách sử dụng với câu lệnh với biểu thức bảng chung, hãy truy cập trang web MSDN sau đây:

VỚI common_table_expression (Transact-SQL)Để biết thêm thông tin về sys.dm_exec_query_stats, hãy truy cập trang web MSDN sau đây:

sys.dm_exec_query_stats (Transact-SQL)

Facebook LinkedIn Email ĐĂNG KÝ NGUỒN CẤP DỮ LIỆU RSS

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ộng đồng

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.

Lợi ích đăng ký Microsoft 365

Nội dung đào tạo về Microsoft 365

Bảo mật Microsoft

Trung tâm trợ năng

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ú.

Hỏi Cộng đồng Microsoft

Cộng đồng Kỹ thuật Microsoft

Người dùng Nội bộ Windows

Người dùng nội bộ Microsoft 365

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

Có Không (Gửi ý kiến phản hồi cho Microsoft để chúng tôi có thể trợ giúp.) 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? Đã giải quyết vấn đề của tôi Hướng dẫn Rõ ràng Dễ theo dõi Không có thuật ngữ Hình ảnh có ích Chất lượng dịch thuật Không khớp với màn hình của tôi Hướng dẫn không chính xác Quá kỹ thuật Không đủ thông tin Không đủ hình ảnh Chất lượng dịch thuật Bất kỳ thông tin phản hồi bổ sung? (Không bắt buộc) Gửi phản hồi 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!

×

Từ khóa » Dấu Khác Trong Sql