PDA

View Full Version : سوال: درباره یک پروسیجری که مجموع رکوردها را برمیگرداند



moferferi
سه شنبه 17 شهریور 1388, 17:58 عصر
سلام
همان طور که میدونید با این کد تعداد رکورد مورد نظر را برمیگردونه و لی من نمیدونم
عبارت set nocount on چه کاری میکنه.چون اگه باشه یا نباشه فرقی به حال خروجی نمیکنه و هردوش یه عدد را برمیگردونه


alter procedure persongetcontacts
@rowcount int output
as
set nocount on
select * from Person.Contact
set @rowcount=@@rowcount
return @rowcount

محمد سلیم آبادی
سه شنبه 17 شهریور 1388, 18:24 عصر
حق با شما است چه NoCount روی ON تنظیم شده باشد چه روی OFF به هیچ وجه روی خروجی متغیر سیستمی @@rowcount تاثیر نمی گذارد.
طبق مطالب Book Online برای SP هایی که شامل چندین دستور هستند ولی داده های زیادی را برنمی گردانند تنظیم NoCount روی ON می تواند عملکرد اجرای آن را به مراتب افزایش دهد.

Alireza Orumand
چهارشنبه 18 شهریور 1388, 08:51 صبح
سلام
اگر دقت کرده باشید بعد از اینکه عملیاتی انجام میدید داخل sql server تعداد رکورد های تحت تاثیر عملیات نشون داده میشه. مثلا اگر عمل update انجام بدید در حالت عادی sql server پیامی به این مضمون به شما میده (218 row(s) affected) حالا اگر شما set nocount on رو انجام بدید پیامی که به شما داده میشه Command(s) completed successfully.هست. و این ربطی به خروجی تابع شما نداره، به عملکرد داخلی سرور برمیگرده.
تو یه مقاله خوندم که در شرایطی که مقدار به on تغییر کنه سرعت عملیات بیشتر میشه، چون نیازی به شمارش رکورد های تحت تاثیر قرار گرفته نداره، ولی من تا حالا تاثیر به سزایی توی سرعت ندیدم
موفق باشید.