Натхненний цим питанням, де існують різні погляди на НАСТРОЙКА НАКРУТУ ...
Чи варто використовувати SET NOCOUNT ON для SQL Server? Якщо ні, то чому б ні?
Що робить редакція 6, 22 липня 2011 року
Він пригнічує повідомлення "xx рядків, на які постраждало" після будь-якого DML. Це набір результатів, і після надсилання клієнт повинен його обробити. Він крихітний, але вимірюваний (див. Відповіді нижче)
Для тригерів тощо клієнт отримає кілька "постраждалих рядків xx", і це спричиняє всілякі помилки для деяких ORM, MS Access, JPA тощо (див. Правки нижче)
Фон:
Загальновизнаною найкращою практикою (я думав, поки це питання) є використання SET NOCOUNT ON
в тригерах і збережених процедурах в SQL Server. Ми використовуємо його скрізь, і швидкий google показує велику кількість MVP з SQL Server.
MSDN каже, що це може зламати .net SQLDataAdapter .
Тепер це означає для мене, що SQLDataAdapter обмежується гранично простою обробкою CRUD, оскільки він очікує, що повідомлення "n рядків, на які постраждали" збігається. Отже, я не можу використовувати:
- ЯКЩО Є, щоб уникнути дублікатів (повідомлення не стосується рядків) Примітка: використовуйте обережно
- Де не існує (менше рядків, ніж очікувалося)
- Відфільтруйте банальні оновлення (наприклад, дані фактично не змінюються)
- Чи будь-який доступ до таблиці раніше (наприклад, ведення журналу)
- Приховати складність або денормізацію
- тощо
У запитанні marc_s (хто знає його речі SQL) каже, що не використовуйте його. Це відрізняється від того, що я думаю (і я вважаю себе дещо компетентним в SQL).
Можливо, мені чогось не вистачає (сміливо зазначте очевидне), але що ви думаєте, хто там?
Примітка: минуло роки, як я побачив цю помилку, оскільки в даний час не використовую SQLDataAdapter.
Зміни після коментарів та запитань:
Редагувати: більше думок ...
У нас є кілька клієнтів: один може використовувати C # SQLDataAdaptor, інший може використовувати nHibernate від Java. На них можна впливати по-різному SET NOCOUNT ON
.
Якщо ви розглядаєте збережені програми як методи, то це погана форма (антидіаграма) припускати, що якась внутрішня обробка працює певним чином для ваших власних цілей.
Редагування 2: тригер, що порушує nібічне запитання , де SET NOCOUNT ON
не можна встановити
(і ні, це не дублікат цього )
Edit 3: Ще більше інформації, завдяки моєму колезі з MVP
- KB 240882 , випуск, що викликає відключення в SQL 2000 та новіших версіях
- Демонстрація підвищення продуктивності
Редагування 4: 13 травня 2011 року
Порушує Linq 2 SQL також, коли не вказано?
Редагування 5: 14 червня 2011
Розбиває JPA, зберігається proc із змінними таблиці: Чи підтримує JPA 2.0 змінні таблиці SQL Server?
Редагування 6: 15 серпня 2011 року
Сітка даних SSMS "Редагувати рядки" вимагає SET NOCOUNT ON: тригер оновлення за допомогою GROUP BY
Редагувати 7: 07 березня 2013 року
Більш докладно про @RemusRusanu:
чи НАСТРОЮВАННЯ НОКУНТУ НА ВКЛЮЧЕННІ дійсно так багато різниці в продуктивності