PDA

View Full Version : محدودیت در طول دستور sql دریافتی



once4ever
شنبه 05 آبان 1386, 13:36 عصر
حداکثر طول دستوری که میشه به بانک sql فرستاد چقدر هست؟
یعنی یک دستور select با in دارم که هزارتا مقدار مشخص شده و با سی شارپ به بانک ارسال میشه که سلکت کنه.
آیا طول دستور محدودیتی داره؟

AminSobati
شنبه 05 آبان 1386, 23:48 عصر
دوست عزیزم من پیشنهاد میکنم این کار رو با یک Join عوض کنین! چون روش استفاده از IN همیشه Table Scan میده و برای Performance بسیار مضر هست

ghabil
یک شنبه 06 آبان 1386, 00:32 صبح
آخه همیشه که نمیشه Join کرد مثلا کاربر روی یک لیست 1000 تایی اتفاقی 50 مورد رو انتخاب میکنه و میخواهیم روی اونا یک تغییری بدیم ، فکر نمیکنم پیشنهادتون این باشه که یک جدول در حافظه بسازیم و بعد Join کنیم .
به هر حال من تا بحال با محدودیت طول کوئری در SQL Server برخورد نکردم ، یادم میاد کوئری هم داشتم که 10kb بوده.

RezaKia
یک شنبه 06 آبان 1386, 07:26 صبح
سلام،


حداکثر طول دستوری که میشه به بانک sql فرستاد چقدر هست؟
یعنی یک دستور select با in دارم که هزارتا مقدار مشخص شده و با سی شارپ به بانک ارسال میشه که سلکت کنه.
آیا طول دستور محدودیتی داره؟

میزان محدودیت طول دستور به صورت زیر است:

در 2000: حداکثر تعداد کاراکترهای تشکیل دهنده یک دستور «نه Batch» با احتساب جداکننده هایی مثل Space و Tab باید کمتر از 8000 کاراکتر باشد. و سر کارکتر 4000ام به دو بخش تقسیم میشود.
در 2005: جداکننده ها بحساب نمی آیند و تقسیم در کارکتر 4000ام نداریم.
طول کل رشته ارسالی، برای حالتی که شامل چند دستور مستقل «به اصلاح Batch» باشد نباید بیشتر از 1024Mb باشد.
طول کل رشته ارسالی محدود به عدد کنترلی Socket ویندوز است. «در XP بابر 4096 بایت و در 2003 برابر 8192بایت است»بنابراین دستور ارسالی به سمت SQL بعد از اضافه شدن عناصر کنترلی خود SQL به آن در بسته های 4 یا 8 کیلو بایتی برای SQL ارسال میشوند.
در سمت SQL نیز بعد از دریافت به روش ذکر شده در بالا Compile و اجرا میشوند.




موفق باشید. :تشویق:

AminSobati
یک شنبه 06 آبان 1386, 10:30 صبح
آخه همیشه که نمیشه Join کرد مثلا کاربر روی یک لیست 1000 تایی اتفاقی 50 مورد رو انتخاب میکنه و میخواهیم روی اونا یک تغییری بدیم ، فکر نمیکنم پیشنهادتون این باشه که یک جدول در حافظه بسازیم و بعد Join کنیم .
به هر حال من تا بحال با محدودیت طول کوئری در SQL Server برخورد نکردم ، یادم میاد کوئری هم داشتم که 10kb بوده.

http://www.sommarskog.se/arrays-in-sql.html

mhadvi_mahmaood
یک شنبه 06 آبان 1386, 22:42 عصر
سلام،



میزان محدودیت طول دستور به صورت زیر است:
در 2000: حداکثر تعداد کاراکترهای تشکیل دهنده یک دستور «نه Batch» با احتساب جداکننده هایی مثل Space و Tab باید کمتر از 8000 کاراکتر باشد. و سر کارکتر 4000ام به دو بخش تقسیم میشود.
در 2005: جداکننده ها بحساب نمی آیند و تقسیم در کارکتر 4000ام نداریم.
طول کل رشته ارسالی، برای حالتی که شامل چند دستور مستقل «به اصلاح Batch» باشد نباید بیشتر از 1024Mb باشد.
طول کل رشته ارسالی محدود به عدد کنترلی Socket ویندوز است. «در XP بابر 4096 بایت و در 2003 برابر 8192بایت است»بنابراین دستور ارسالی به سمت SQL بعد از اضافه شدن عناصر کنترلی خود SQL به آن در بسته های 4 یا 8 کیلو بایتی برای SQL ارسال میشوند.
در سمت SQL نیز بعد از دریافت به روش ذکر شده در بالا Compile و اجرا میشوند.




موفق باشید. :تشویق:
میشه منبعتون رو هم بگید؟

RezaKia
یک شنبه 06 آبان 1386, 23:01 عصر
سلام،


میشه منبعتون رو هم بگید؟

چرا نشه. اینم منابعی که من همواره به همین ترتیب ازشون استفاده میکنم:

MVPs
MSDN
Pro-Coders
البته همون طور که میدونید، موارد 1و 2 رایگان نیستند. :گریه: مخصوصا مورد اول که خیلی گرون هستند.

مطالب این موضوع رو چند ماه قبل از یکی از Pro-Coders یاد گرفتم. :لبخندساده:

موفق باشید. :تشویق:

mhadvi_mahmaood
دوشنبه 07 آبان 1386, 09:12 صبح
مورد دوم که به صورت آنلاین رایگانش وجود داره. دو مورد دیگه رو ازش خبر ندارم