PDA

View Full Version : آپدیت رکورد N ام



Payman62
یک شنبه 01 خرداد 1390, 14:00 عصر
سلام.
یه تیبل دارم که همه مقادیر یه فیلدش ناله. حالا میخوام یه حلقه بذارم و از فیلد اول تا آخر رو دونه دونه مقدار بدم.

تو حلقه هر دفعه باید بگم رکورد N ام رو فلان مقدار بده.
با دستور ROW_NUMBER که تو sql 2005 اضافه شده یه کارایی کردم. میتونم فیلد N ام رو سلکت کنم. اما هنگام آپدیت با این که شرط میذارم که ROW_NUMBER برابر N باشه اما باز همه رکورد ها آپدیت میشه.

کسی راهی به ذهنش میرسه؟

یوسف زالی
یک شنبه 01 خرداد 1390, 14:37 عصر
این رو امتحان کنید:


update TBL
set Field =
(select count(1)+1 from TBL A where A.ID < TBL.ID)

یوسف زالی
یک شنبه 01 خرداد 1390, 14:37 عصر
البته مشروط به اینه که ID شما Identity باشه.

Payman62
دوشنبه 02 خرداد 1390, 02:22 صبح
سلام.
کلید اصلی داشت که مشکلی نداشتم. به دلایلی اصلا تیبلش کلید اصلی نداره.

Payman62
چهارشنبه 04 خرداد 1390, 11:58 صبح
سلام.
چی شد پس؟

یوسف زالی
چهارشنبه 04 خرداد 1390, 13:14 عصر
این هم کد شما:


declare @t table(SN intnull)
insert into @t
values (null),(null),(null),(null),(null),(null),(null),( null),(null),(null),(null),(null),(null),(null),(n ull),(null),(null),(null)
while @@ROWCOUNT<> 0
update top (1) @t
set SN =isnull((select MAX(SN) from @t), 0)+1
where SN is null

select *
from @t

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

behrouzlo
چهارشنبه 04 خرداد 1390, 13:40 عصر
اگر از نسخه 2005 یا به بالا استفاده می کنید به صورت زیر می توانید عمل کنید:

Declare @N Int = 5;

With Tbl As ( Select *,Row_number() Over (order By Id) As Rows From Tbl1 )
Update Tbl Set Id = Id + 1 Where Rows = @N

Payman62
چهارشنبه 04 خرداد 1390, 20:18 عصر
اگر از نسخه 2005 یا به بالا استفاده می کنید به صورت زیر می توانید عمل کنید:

Declare @N Int = 5;

With Tbl As ( Select *,Row_number() Over (order By Id) As Rows From Tbl1 )
Update Tbl Set Id = Id + 1 Where Rows = @N


سلام.
ممنونم. کد شما با کمی تغییر جواب داد. به این صورت:



Declare @N Int
set @N = (select count(*) from Tbl1);
with Tbl (Field1,RowNum) As
(Select Field1,Row_number() Over (order By Field1) As RowNum From Tbl1)
Update Tbl Set Field1 = RowNum Where RowNum <= @N