2010-07-01 36 views
5

tôi đọc here rằng số lượng tối đa các thông số có thể được truyền cho một Stored Procedure là 2100.SQL Max thông số

Tôi chỉ tò mò những gì loại hệ thống sẽ yêu cầu một SP với 2100 thông số được thông qua, và không thể chia nó thành nhiều SP?

Tôi nghĩ rằng có thể một SP gọi nhiều SP sẽ yêu cầu nhiều thông số cần được chuyển, tôi không thể hiểu được điều đó là một bức tượng kinh tởm EXEC.

+0

Nếu bạn đã từng làm việc với Microsoft CRM, thì bạn sẽ có kinh nghiệm với một hệ thống yêu cầu các thủ tục được lưu trữ với số tham số này cho một thủ tục được lưu trữ. –

+0

Tôi chưa có. Tôi chỉ làm việc chuyên nghiệp trong khoảng 2 năm. Vì vậy, trong việc tìm hiểu thêm về ngôn ngữ mà tôi sử dụng, tôi tình cờ gặp sự thật thú vị này. Và chỉ là một câu hỏi tò mò. – Jim

Trả lời

5

Nếu bạn có một thủ tục lưu trữ sử dụng 2100 tham số bạn rất có thể có một số loại vấn đề thiết kế.

Chuyển vào danh sách CSV giá trị trong một tham số (và sử dụng hàm tách giá trị bảng để chuyển thành hàng) hoặc sử dụng tham số giá trị bảng sẽ dễ dàng hơn nhiều so với xử lý tất cả các thông số đầu vào đó.

+0

+1: Đây là một trong những câu hỏi "nếu bạn phải hỏi .." –

+0

Đó là suy nghĩ đầu tiên của tôi khi tôi đọc thực tế này. – Jim

4

tôi đã có một tình huống mà tôi đã phải chạy một cái gì đó khá giống như sau:

SELECT 
    ... 
WHERE 
    ID IN (?,?,?,?...) 

Danh sách các thông số đặc trưng tất cả các thực người dùng có được phép sử dụng trong hệ thống (nó đã được tự động tạo ra bởi một số cơ bản khuôn khổ). Hóa ra SGBD có một giới hạn về số lượng tham số được truyền như thế này, và dưới 2100 (IIRC, đó là Oracle và tối đa là 999 tham số trong danh sách IN).

Đây sẽ là một ví dụ hay về danh sách các thông số khá dài đối với một thứ phải là thủ tục lưu sẵn (chúng tôi có hơn 999 và ít hơn 2100 thông số để vượt qua).

Không biết nếu 999 hạn chế áp dụng đối với máy chủ SQL, nhưng nó chắc chắn là một tình huống mà các danh sách dài sẽ có ích ...

+1

Tôi đã vượt qua giới hạn đó trong Oracle của 1000 tham số cho mỗi biểu thức IN nhiều lần. Vui vẻ bạn có thể làm việc xung quanh nó bằng cách sử dụng nhiều hơn một điều kiện IN: 'id IN (1000 id đầu tiên) HOẶC id IN (1000 id tiếp theo)'. –

+0

Có. Đây là một thời gian dài trước đây nhưng IIRC, đó là những gì chúng tôi đã làm vào thời điểm đó. –

+0

nó sẽ dễ dàng hơn để vượt qua trong một danh sách các tham số CSV và chia chúng thành các hàng trong thủ tục được lưu trữ, nơi bạn có thể tham gia hoặc sử dụng chúng như một bảng. –

9

Giới hạn của tham số thủ tục trước cả kiểu dữ liệu XML và bảng có giá trị tham số, do đó, ngược lại trong những ngày đó đơn giản là không có thay thế. Có 2100 tham số trên một quy trình không nhất thiết có nghĩa là một con người đã viết nó cũng không phải là một con người sẽ gọi nó. Nó khá phổ biến trong mã được tạo, như mã được tạo bởi các công cụ và khung công tác, để đẩy các ranh giới như vậy cho bất kỳ ngôn ngữ nào, do việc bảo trì và tái cấu trúc mã được tạo xảy ra trong công cụ tạo.

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