Ngăn xếp tràn xảy ra khi bạn chạy một truy vấn có chứa một số lớn các đối số bên trong một IN hoặc một điều khoản không IN trong SQL Server

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch máy của Microsoft chứ không phải do con người dịch. Microsoft cung cấp các bài viết do con người dịch và cả các bài viết do máy dịch để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng ngôn ngữ của bạn. Tuy nhiên, bài viết do máy dịch không phải lúc nào cũng hoàn hảo. Loại bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, giống như một người nước ngoài có thể mắc sai sót khi nói ngôn ngữ của bạn. Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra. Microsoft cũng thường xuyên cập nhật phần mềm dịch máy này.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này:288095
Bài viết này đã được lưu trữ. Bài viết được cung cấp "nguyên trạng" và sẽ không còn được cập nhật nữa.
BUG #: 235727 (shiloh_bugs)
BUG #: 58274 (sqlbug_70)
TRIỆU CHỨNG
Truy vấn có chứa một số lớn các đối số (hàng ngàn) bên trong một IN hoặc một điều khoản không IN có thể tạo ra một ngăn xếp tràn. Ví dụ, truy vấn sau đây kết quả trong một ngăn xếp tràn:
SELECT max(au_id) FROM authors WHERE au_id IN(1,2,5,......,11571)  -- Query contains over 11570 arguments.				
Nhật ký lỗi SQL Server chứa thông tin tương tự như sau khi tràn ngăn xếp xảy ra:
2000-08-10 12:02:37.87 spid51    08/10/00 12:02:37 Stack Overflow Dump not possible - Exception c00000fd E at 0x005872862000-08-10 12:02:37.87 spid51    Address=587286 Exception Code = c00000fd2000-08-10 12:02:37.87 spid51    eax=195922d0 ebx=19592338 ecx=2ad0e938 edx=000000072000-08-10 12:02:37.87 spid51    esi=196ce2c8 edi=19592180 eip=00587286 esp=2ac930002000-08-10 12:02:37.87 spid51    ebp=2ac93028 efl=000102022000-08-10 12:02:37.87 spid51    cs=1b ss=23 ds=23 es=23 fs=38 gs=02000-08-10 12:02:37.87 spid51    1: Return Address 005872862000-08-10 12:02:37.87 spid51    2: Return Address 0058728B.................				
Trong một số trường hợp, SQL Server có thể thực sự tắt máy như là kết quả của ngăn xếp tràn.
CÁCH GIẢI QUYẾT KHÁC
Viết lại các truy vấn và sử dụng một bảng #temp có chứa các giá trị trong danh sách IN thay vì sử dụng một mệnh đề IN. Ví dụ, truy vấn trước có thể được re-written như thế này:
CREATE TABLE #IN_values (au_id char(4))INSERT INTO #IN_values select au_id FROM Table_with_values_123456789...SELECT max(au_id)FROM authors as AJOIN #IN_values as I ON (A.au_id = I.au_id)				
TÌNH TRẠNG
Microsoft đã xác nhận rằng đây là một vấn đề trong các sản phẩm của Microsoft được liệt kê ở đầu của bài viết này.
THÔNG TIN THÊM
Khách hàng không ngắt kết nối, nhưng thông báo lỗi này có thể xảy ra:
Máy chủ: Msg 8621, tầng 17, bang 1, đường 2Truy vấn bộ xử lý lỗi bên trong: Bộ vi xử lý truy vấn chạy không gian ngăn xếp trong tối ưu hóa truy vấn.

Cảnh báo: Bài viết này được dịch tự động

Thuộc tính

ID Bài viết: 288095 - Xem lại Lần cuối: 12/06/2015 00:23:52 - Bản sửa đổi: 2.0

Microsoft SQL Server 7.0 Standard Edition, Microsoft SQL Server 2000 Enterprise Edition, Microsoft SQL Server 2000 Personal Edition, Microsoft SQL Server 2000 Developer Edition, Microsoft SQL Server 2000 Standard Edition

  • kbnosurvey kbarchive kbprb kbpending kbmt KB288095 KbMtvi
Phản hồi