Kết Quả Không Chính Xác Nếu Bạn Sử Dụng Dấu Ngoặc đơn Xung ...
Có thể bạn quan tâm
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 <> -1Trong 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 @xENDKhi 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) GOKhi 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_expressioTrạ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)
Từ khóa » Dấu Khác Trong Sql
-
Các Toán Tử So Sánh Trong SQL Server
-
Toán Tử Trong SQL
-
Toán Tử AND OR NOT IN Trong SQL
-
Toán Tử Trong SQL - Học Sql Cơ Bản đến Nâng Cao - VietTuts
-
Toán Tử So Sánh LIKE, IN Trong SQL - Thủ Thuật
-
Các Toán Tử Trong SQL Server - Học Phân Tích Dữ Liệu ... - MasterMOS
-
3 Loại Toán Tử Trong SQL Ai Cũng Cần Biết
-
Các Toán Tử Any Và All Trong SQL - BAC
-
Toán Tử Trong Sql - GreenSQL
-
So Sánh Khác Trong Sql - Bí Quyết Xây Nhà
-
Các Toán Tử Số Học Trong SQL - Deft Blog
-
Mẹo Làm Việc Với Truy Vấn SQL - Microsoft Support
-
Chi Tiết Bài Học 08. Các Toán Tử Trong SQL - Vimentor
-
Toán Tử So Sánh LIKE, IN Trong SQL - Phần Mềm FREE
-
Danh Sách Comparison Operators Trong Oracle
-
Các Toán Tử So Sánh Trong SQL Server - Vay Tiền Online Bằng CMND