Có bao nhiêu tham số thủ tục lưu trữ là quá nhiều?


12

Tôi mới bắt đầu viết một thủ tục được lưu trữ trong SQL Server 2008 và có hơn 30 tham số. Tôi chưa bao giờ viết một cái có hơn ~ 10 tham số và điều đó khiến tôi suy nghĩ ... Tại thời điểm nào có quá nhiều tham số?

Đối với ngữ cảnh ... quy trình này về cơ bản sẽ CHỈ một hàng vào một bảng duy nhất. Cũng sẽ có một điều rất giống nhau; mặc dù hơi nhỏ hơn; phiên bản thực hiện CẬP NHẬT trên cùng một bảng. Hầu hết các cột tương đối nhỏ với sự kết hợp của int và chuỗi ( varchar(200)).

Các vấn đề là gì; tốt hay xấu; để có một thủ tục với số lượng lớn các tham số và ngưỡng mà tôi nên bắt đầu xem xét các mẫu khác là gì?


1
Chính xác như 'nếu bạn phải hỏi giá, bạn không đủ khả năng'. Nếu bạn bắt đầu tự hỏi có bao nhiêu tham số là quá nhiều, bạn có quá nhiều. Vấn đề chính không phải là động cơ, mà là bạn, người đọc / người duy trì mã của con người. Vì vậy, tôi muốn nói là có thể có càng nhiều càng tốt trong mã được tạo tự động , nhưng hãy giữ nó hợp lý trong mã viết tay / bảo trì.
Remus Rusanu

Câu trả lời:


12

Vấn đề? Tôi không tranh luận.

  • Giới hạn là 2100 tham số . IIRC đã được 2100 kể từ SQL2000 nhưng một lỗi tài liệu cho thấy nó là 1024.
  • Nếu một bảng có 1000 cột ( ví dụ do sắp xếp cột thưa thớt Sharepoint-esque ) và bạn đang thực thi quyền truy cập thông qua các thủ tục được lưu trữ, thì Proc của bạn có thể có 1000 tham số. Không có gì sai với điều đó.
  • Đừng tạm dừng để xem lại lược đồ khi bạn gặp một bảng rộng (không phải là 30 đặc biệt rộng). Không có gì lạ khi tìm thấy những chiếc bàn bắt đầu cuộc sống bình thường nhưng thông qua sự lười biếng và / hoặc sự yếu đuối đã mở rộng ra ngoài sự công nhận.
  • Thậm chí không xem xét ngắn gọn việc chuyển một tập hợp các tham số dưới dạng danh sách CSV hoặc XML. Làm mờ trình tối ưu hóa truy vấn và tiết kiệm rất ít thời gian hoặc công sức.
  • Đừng quay tay mã máy khách để gọi một thủ tục với số lượng lớn các tham số. Các công cụ tạo mã như các mẫu T4 hoặc CodeSmith để giải cứu.

1
Cảm ơn câu trả lời này, nó đã được nêu rất độc đáo. Điều này trả lời câu hỏi của tôi hoàn hảo. Thật tệ khi họ không có huy hiệu cho việc sử dụng những từ Scrabble tuyệt vời như " fecklessness "
JoeGeeky

2

Joe Celko là người ủng hộ các danh sách tham số dài, mà ông viết về chi tiết trong này gồm hai phần bài viết:

Câu trả lời đơn giản nhất là sử dụng danh sách tham số dài để xây dựng danh sách và bảng dẫn xuất bên trong phần thân thủ tục. Máy chủ SQL có thể xử lý tới 2100 tham số, quá đủ cho các mục đích thực tế. SQL Server thực sự là một điểm yếu trong vấn đề này; DB2, có thể truyền 32K tham số. và Oracle có thể có 64K tham số.

... Danh sách tham số dài được tạo thành từ các tham số cũ đơn giản, có nghĩa là chúng có thể được sử dụng cho đầu ra cũng như đầu vào. Nó cũng được chứa trong một tuyên bố cho trình tối ưu hóa sử dụng.

Tôi có nghĩ rằng những kỹ thuật này sẽ luôn là giải pháp tốt nhất? Dĩ nhiên là không. Không có điều đó trong SQL. Nhưng nó đáng để xem xét khi bạn nhận được một vấn đề thích hợp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.