ورود

View Full Version : update چندین رکورد در یک حلقه



benighted.boy
یک شنبه 24 شهریور 1387, 19:29 عصر
با سلام
من یک جدول دارم که نیاز داره در مقاطع زمانی یک فیلد را در تمامی رکوردها و در مقاطعی خاص تعدادی از رکوردها را update کند.
این update به این گونه است که در ادامه مقادیر گذشته در آن فیلد مقادیر جدید وارد می کند
کدی که به کار بردم را در زیر میگذارم اما : 1.زمانی که زرف execute می کند غیر منطقیست
2. در پایان هیچی را ست نمیکند


DECLARE VolsSent_Cursor CURSOR fast_forward
for Select VolsSent FROM Discript
DECLARE @VolsSent nvarchar(255)

OPEN VolsSent_Cursor
FETCH next FROM VolsSent_Cursor
INTO @VolsSent

WHILE @@fetch_status = 0
BEGIN
FETCH next FROM VolsSent_Cursor
INTO @VolsSent
UPDATE Discript
SET VolsSent =@VolsSent +'\115'
END
CLOSE VolsSent_Cursor
DEALLOCATE VolsSent_Cursor

Touska
یک شنبه 24 شهریور 1387, 20:14 عصر
ببیند اینجوری مشکلتون حل میشه یا نه ؟


DECLARE VolsSent_Cursor CURSOR fast_forward
for Select VolsSent FROM Discript
DECLARE @VolsSent nvarchar(255)

OPEN VolsSent_Cursor
FETCH next FROM VolsSent_Cursor
INTO @VolsSent

WHILE (@@fetch_status = 0) AND (@@FETCH_STATUS <> -1) AND (@@FETCH_STATUS <> -2)
BEGIN
UPDATE Discript
SET VolsSent =@VolsSent +'\115'

FETCH next FROM VolsSent_Cursor
INTO @VolsSent

END
CLOSE VolsSent_Cursor
DEALLOCATE VolsSent_Cursor

benighted.boy
یک شنبه 24 شهریور 1387, 20:20 عصر
دوست عزیز ممنون از لطفت اما هنوز مشکلم حل نشده
1. زمانه execute یه مقداری زیاده
2. Update اعمال نمیشه
هیچ خطایی نمیده و با موفقیت تا آخرین رکورد میره اما هیچ تغییری ایجاد نمیکنه

Touska
یک شنبه 24 شهریور 1387, 21:05 عصر
هیچ Error ی که نمیده و به راحتی اجرا میشه و Update هم که اعمال نمیشه :

1- میتونه شرط که برای select دارید مشکل داره .
2- در مورد طولانی شدنش هم باید بگم اگر تعداد رکورد هاتون زیاد باشه ، طبیعی هست.

و یک سئوال این کار شما رو هم میشه با Update معمولی انجام داد :


Update Discript Set VolsSent = (RTrim(VolsSent) + '\115')

benighted.boy
یک شنبه 24 شهریور 1387, 21:10 عصر
توی این حالت یه مقداررو به دفعات در یک فیلد تکرار می کنه
بله با اون حل میشه اما من قصد دارم در ادامه شرط هایی هم به حلقه اضافه کنم تا خط به خط سایر پارامترهارو چک کنه

Touska
یک شنبه 24 شهریور 1387, 21:17 عصر
روش کار درست هست ، اگر براتون امکان داره فایل دیتابیس رو Zip و Upload نمایید تا من هم چکی کنم.

من اینجا با یک Database Test امتحان کردم ، مشکلی وجود نداشت.

benighted.boy
یک شنبه 24 شهریور 1387, 21:25 عصر
یه بار تمام مقدار هارو null کردم و بعد از اون با این کد مشکلم حل شد.اما اطالاعات قبلی از DB پاک شد .ممنون از لطفتون

DECLARE VolsSent_Cursor CURSOR fast_forward
for Select VolsSent FROM Discript
DECLARE @VolsSent nvarchar(255)

OPEN VolsSent_Cursor
FETCH next FROM VolsSent_Cursor
INTO @VolsSent

WHILE @@fetch_status = 0
BEGIN
FETCH next FROM VolsSent_Cursor
INTO @VolsSent
UPDATE Discript
SET VolsSent =@VolsSent +'\115'
Where Activate =1
END
CLOSE VolsSent_Cursor
DEALLOCATE VolsSent_Cursor