2011-07-13 80 views
5

Tôi đã tự hỏi nếu có một giới hạn về một số câu lệnh SELECT UNION'ed tôi có thể gửi đến một máy chủ SQL? Tôi có thể có đến 36 được thực hiện trong một câu lệnh SQL, do đó, nó trở nên khá dài, nhân vật khôn ngoan. (Ngoài ra mỗi người trong số những câu SELECT là một chút phức tạp bằng cách riêng của mình với CASE KHI báo cáo trong đó.)Máy chủ SQL: Giới hạn số UNION là bao nhiêu?

+0

Phiên bản nào của SQL xin vui lòng? –

Trả lời

12

Từ SQL 2008 BOL

"Bất cứ số nhà khai thác UNION có thể xuất hiện trong một tuyên bố Transact-SQL"

cũng từ MSDN "Thông số kỹ thuật tối đa năng lực cho SQL server" (2008):

hàng loạt kích thước (1)65.536 * Mạng gói Kích

Chiều dài của một chuỗi chứa câu lệnh SQL (batch kích thước) (1)65.536 * kích thước gói tin mạng

(1) Mạng gói Kích được kích thước của dòng dữ liệu dạng bảng (TDS) gói tin sử dụng để giao tiếp giữa các ứng dụng và Cơ sở dữ liệu quan hệ. Kích thước gói mặc định là 4 KB và được kiểm soát bởi tùy chọn cấu hình kích thước gói mạng.

Theo tôi, điều đó có nghĩa là 268.435,456 byte khi sử dụng giá trị mặc định. Vui lòng nói truy vấn của bạn ngắn hơn.

+0

+1, nhưng liên kết sẽ đẹp hơn ... – gbn

+0

@gbn - liên kết được thêm vào. –

+0

[Chỉnh sửa] Này, ở mặt bên.Có giới hạn chiều dài của câu lệnh SQL không? – ahmd0

2

Theo điều này post ở đâu đó giữa 8000 và 16000, cho truy vấn cụ thể của mình. Có lẽ chủ yếu được quản lý bởi các tài nguyên có sẵn cho SQL Server của bạn.

Có thể bạn nên đặt một câu hỏi khác về trường hợp cụ thể mà bạn có cho một phương pháp thay thế không cần nhiều công đoàn.

+1

+1 Điểm tốt. Tôi nghi ngờ nếu bạn phải làm điều này nhiều UNIONS thì có gì đó sai với cấu trúc dữ liệu hoặc truy vấn của bạn. –

+0

Có quá 36 không? – ahmd0

+0

Đó là một chút, có thể có nghĩa là có một cách tốt hơn để làm bất cứ điều gì nó được. Phụ thuộc vào hoàn cảnh, nhưng giá trị của nó yêu cầu (hoặc tìm kiếm câu hỏi trước đó). –

3

Necromancing, bởi vì bây giờ tôi biết câu trả lời thực tế.

Về mặt kỹ thuật, như Neil Moss đã nói,> 268 triệu byte (ký tự ASCII) hoặc> 134 triệu UTF-16 ký tự.

Tuy nhiên, có giới hạn "256 bảng cho mỗi câu lệnh SELECT".

Và trong khi bạn có thể sử dụng nhiều hơn 256 bảng trong một truy vấn VỚI BÁO CÁO UNION, chẳng hạn một truy vấn không có thể được sử dụng như một cái nhìn, chức năng bảng có giá trị hoặc là một subquery cho một câu lệnh SELECT.

Ngoài ra, nếu bạn sử dụng truy vấn đó trực tiếp, bạn có thể đạt đến giới hạn không gian ngăn xếp của trình tối ưu hóa truy vấn vào khoảng 1'300-1'500 SELECT. Tôi biết, bởi vì nhờ có một OCP (cảnh báo - mỉa mai) tuyệt vời (mã ban đầu "lập trình viên"), chúng tôi có lược đồ af * ed lên, và tôi thực sự chạy vào cả hai, 256 và 1'300- Giới hạn 1'500.

(một bảng cho mỗi loại đối tượng, trong trường hợp bất kỳ ai thắc mắc, với cùng một lược đồ cột (nhưng không phải tên) cho mỗi bảng - thay vì bảng tham chiếu với loại đối tượng ...)

Các vấn đề liên quan