PDA

View Full Version : اجرای یک دستور sql در یک حلقه؟



Behsharp
دوشنبه 04 تیر 1386, 10:44 صبح
سلام
من قصد دارم یک دستور sql را مثل update table1 set col1='re[i]' در یک حلقه بزارم البته قبلش کانکشن را باز می کنم و بعد از اتمام حلقه کانکشن را میبندم حالا می خوام بدونم این کار منطقا درست است و یا اینکه راه بهتری هم وجود دارد و در حالتیکه دستور من به صورت یک sp باشد چطور می تونم همچین کاری کنم یعنی قراردادن یک sp در یک حلقه
ممنون

Kamyar.Kimiyabeigi
دوشنبه 04 تیر 1386, 10:47 صبح
این حلقه شما روی چی زده میشه؟

azmoodeh
دوشنبه 04 تیر 1386, 10:49 صبح
سلام
اگر اندازه حلقه ات متوسط باشه فرقی نداره ، ولی اگر که زیاد هست ( مثلا اجراش بیشتر از 10 ثانیه طول میکشه ) سعی کنید توی SP ها مشکل رو حل کنید.Cursor ها می تونن کمک خوبی باشن.
موفق باشی

Kamyar.Kimiyabeigi
دوشنبه 04 تیر 1386, 13:38 عصر
من برای این میپرسم که حلقتون روی چه چیزی هست چون میشه update رو به طرق مختلف نوشت بعنوان مثال اگر حلقه شما بر روی جدولی هست که اطلاعات اون جدول در جدول دیگه ایی بروز رسانی میشه دیگه نیازی به حلقه نیست


UPDATE Table1
SET Fld1 = Fld2
FROM Table2
WHERE Fld3 = Value

Behsharp
سه شنبه 05 تیر 1386, 12:59 عصر
حلقه مورد نظر من در محیط dot net هست
من برای sp مورد نظرم یک کد واسطه نوشتم که بتونم از محیط dot net آن را به صورت یک تابع فراخوانی کنم و حالا این تابع قرار است در یک حلقه n بار اجرا شود
اگر N==1 باشه تابع اجرا میشه و هیچ مشکلی هم نداره ولی اگه طول حلقه بیشتربشه پیغام خطا میده
wrong number or types of arguments in call to 'TEACHER_MARKPOST'

pi_plusplus
سه شنبه 05 تیر 1386, 14:19 عصر
با استفاده از کرسر در SP به راحتی میشه کارای مختلفی رو روی یه مجموعه از رکوردها انجام داد. شاید این نمونه کد بتونه کمکت کنه.




Declare @I as int;
Declare @S as nvarchar(50);
Declare cr cursor
local
Dynamic
for Select TID,TName from Test
open cr
FETCH NEXT FROM cr into @I,@S
WHILE @@FETCH_STATUS = 0
BEGIN
Update Test set TID=@I where TName=@S
Fetch next from cr into @I,@S
end
close cr
Deallocate cr