2009-06-22 18 views
20

Truy vấn tìm kiếm đã trả lại lỗi này. Tôi có một cảm giác của nó bởi vì mệnh đề trong là ginormous trên một đối tượng subordinant, khi tôi đang cố gắng để ORM các đối tượng khác.Có quá nhiều tham số được cung cấp trong yêu cầu RPC này. Tối đa là 2100.?

Dường như trong các mệnh đề không được xây dựng 1 tham số tại một thời điểm. Cảm ơn ibatis.

+3

Bạn sẽ phải đăng một số ngữ cảnh. Câu hỏi của bạn truyền tải rất ít hoặc không có ý nghĩa (cũng không phải dòng chủ đề lớn của bạn). –

+2

Tiêu đề quá ngắn – Dan

+0

wow! Tôi không bao giờ biết bạn có thể vượt qua 2100 tham số vào thủ tục !!!! –

Trả lời

19

Đặt cược tốt nhất của bạn là sửa đổi ứng dụng của bạn để chuyển ít hơn 2100 tham số cho quy trình được lưu trữ. Đây là DBMS limit that can't be raised.

8

Bạn có thể làm một vài điều:

  1. Bơm params vào một bảng tạm thời và sử dụng cho biết bảng temp để lọc truy vấn của bạn. Xem https://stackoverflow.com/a/9947259/37055
  2. Tạo một mảng được phân cách bằng dấu phẩy và chuyển mảng đó vào SQL Server dưới dạng varchar (x). Tách nó ra thông qua TSQL (here are a few methods) và sử dụng các rowset kết quả để lọc kết quả tìm kiếm của bạn.
  3. Hãy xem logic ứng dụng của bạn. Đó là nhiều hơn một chút lạ để được thông qua 2100 tham số cho một thủ tục được lưu trữ.
+0

Nó không phải là lạ ... một trong (@ p1, @ p2, ..., @ p2101) được tạo ra bởi một OR/M – JeremyWeir

+0

Thêm liên kết để sử dụng ví dụ # 1 –

-4

Nếu bạn đang chuyển 2100 tham số cho một quy trình được lưu trữ, bạn chỉ cần làm điều gì đó sai. Đừng tăng giới hạn hoặc cố gắng làm việc xung quanh sự ghê tởm này, tìm ra cách làm đúng.

+5

-1 Nếu tôi có hơn 2100 hàng cần xóa (Theo PK Id) làm thế nào là một abomination? Tôi có một hệ thống giao dịch cao đẩy hàng với tốc độ 400 mỗi phút. Nếu mọi thứ đi xuống trong hơn một vài phút thì quá trình thanh lọc của tôi sẽ dễ dàng có hơn 2100 hàng cần dọn dẹp (và tôi không thể dọn dẹp dựa trên bất cứ thứ gì ngoài Id của hàng). – Vaccano

+1

@Vaccano - trước tiên, tôi không phải là người hâm mộ của Linq (hoặc khác, có liên quan, ORM). Một phần, đó là bởi vì nỗ lực bảo vệ các nhà phát triển từ SQL dẫn đến "sự ghê tởm" giống như một cái nổi lên ở đây.DevelopingChris không * tạo * một sproc với nhiều thông số, ORM của anh ấy đã làm. Thứ hai, có rất nhiều cách để giải quyết một vấn đề như của mình mà không cần suy nghĩ về làm việc thông qua một thủ tục lưu trữ với 2100+ tham số. Như tôi đã nói, nếu tâm trí của bạn chuyển sang tham số 2100+, thủ tục được lưu trữ được tạo động như một giải pháp, thì bạn thực sự cần suy nghĩ lại. Rõ ràng, có những giải pháp tốt hơn. –

+0

Nhận xét về bài đăng cũ, nhưng tôi cũng gặp sự cố. Sử dụng Dapper.NET để tìm các id mục không hoạt động (~ 8000 của một tập hợp ban đầu ~ 30000). Sau đó chuyển danh sách đó vào phần "where id not in()". Nó bị đánh bom vào thời điểm này với cùng một thông báo lỗi. Không có thủ tục lưu trữ. Và không có cách nào Dapper.NET bảo vệ tôi khỏi SQL. Truy vấn có ở đó. Điều đó nói rằng, tôi "cố định" bằng cách kéo tất cả các mục xuống, sau đó thực hiện một câu lệnh LINQ .Where (c =>! InactIds.Contains (c.Id)). Tôi có thể chỉ cần đưa tuyên bố không hoạt động vào đâu? Chắc chắn nhưng các hạng mục khác nhau, các tiêu chuẩn khác nhau – Robert

14

Tôi gặp lỗi này khi sử dụng truy vấn LINQ to SQL vô tội. Tôi chỉ muốn lấy tất cả các hồ sơ có id là trong số những người được lưu trữ trong một mảng:

dataContext.MyTable.Where(item => ids.Contains(item.Id)).ToArray(); 

Hóa ra là mảng id đã có hơn 2.100 mặt hàng, và có vẻ như rằng DataContext thêm một tham số cho mỗi mục trong mảng trong truy vấn SQL kết quả.

Cuối cùng, đó là lỗi trong mã của tôi, vì mảng id không có quá nhiều mục. Nhưng dù sao cũng cần lưu ý rằng một số xác thực bổ sung là cần thiết khi sử dụng các cấu trúc như vậy trong LINQ to SQL.

+0

cảm ơn bạn đã xác thực câu hỏi, tôi rất thích nếu bạn upvote nó, kể từ khi bạn chạy vào nó và nó sẽ rõ ràng là hữu ích cho những người khác cho nó ở lại trong lịch sử tìm kiếm của thế giới. – DevelopingChris

+0

Cùng một vấn đề bit tôi. Bất kỳ đề xuất cho một giải pháp thanh lịch? –

+0

Nevermind! tìm thấy câu trả lời ở đây trên StackOverflow: http://stackoverflow.com/questions/656167/hitting-the-2100-parameter-limit-sql-server-when-using-contains –

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