Скільки збережених параметрів процедури занадто багато?


12

Я щойно почав писати збережену процедуру в SQL Server 2008 і має 30+ параметрів. Я ніколи не писав жодного з більш ніж 10 параметрів, і це змусило мене задуматися ... У якому моменті занадто багато параметрів?

Для контексту ... ця процедура по суті ВСТУПИТЬ один рядок в єдину таблицю. Було б також дуже схоже; хоч дещо менший; версія, яка виконує ОНОВЛЕННЯ в одній таблиці. Більшість стовпців порівняно невеликі із поєднанням int та рядків ( varchar(200)).

Які питання; Добре чи погано; до процедури з великою кількістю параметрів і який поріг, з якого я повинен почати розглядати інші шаблони?


1
Це точно так само, як "якщо потрібно запитати ціну, ти не можеш собі цього дозволити". Якщо ви починаєте замислюватися, скільки параметрів занадто багато, у вас занадто багато. Основне питання - це не двигун, а ти, людина, що читає / підтримує код. Тому я б сказав, що це нормально, щоб якомога більше було автоматичного генерованого коду , але зберігайте його в розумному вигляді в ручному написаному / підтримуваному коді.
Рем Русану

Відповіді:


12

Випуски? Я б не заперечував жодного.

  • Межа - 2100 параметрів . У IIRC це було 2100 з часу SQL2000, але помилка в документації припустила, що це 1024.
  • Якщо таблиця містить 1000 стовпців ( наприклад, наприклад, у порядку розрізненого стовпця Sharepoint ), а ви здійснюєте доступ через збережені процедури, вкладка proc може мати 1000 параметрів. Нічого поганого в цьому немає.
  • Зробіть паузу, щоб переглянути схему, коли ви стикаєтеся з широкою таблицею (не те, що 30 особливо широка). Не рідкість знайти таблиці, які почали життя нормалізуватися, але через лінь та / або безпліддя поширилися до невпізнання.
  • Навіть не коротко розглядайте передачу набору параметрів як список CSV або XML. Засліплює оптимізатор запитів і економить мало часу та зусиль.
  • Не рукою прокручуйте код клієнта, щоб викликати процедуру з великою кількістю параметрів. Інструменти генерації коду, такі як шаблони T4 або CodeSmith на допомогу.

1
Дякую за цю відповідь, це було дуже красиво сказано. Це прекрасно відповідає на моє запитання. Це просто занадто погано , вони не мають знак для використання великих ерудитів слів , як « марність »
JoeGeeky

2

Джо Селко є прихильником довгих списків параметрів, про які він детально пише в цій статті , що складається з двох частин :

Найпростіша відповідь - використовувати довгий список параметрів для побудови списків та похідних таблиць всередині органу процедури. SQL-сервер може обробляти до 2100 параметрів, що має бути більш ніж достатньо для практичних цілей. У цьому відношенні SQL Server - наслідок; DB2; може передавати параметри 32K. і Oracle може мати параметри 64K.

... довгий список параметрів складається з простих старих параметрів, а це означає, що їх можна використовувати як для виходів, так і для входів. Він також міститься в одному операторі для оптимізатора, який слід використовувати.

Я думаю, ці методи завжди будуть найкращим рішенням? Звичайно, ні. У SQL такого немає. Але варто придивитися, коли у вас з’явиться відповідна проблема.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.