PDA

View Full Version : سوال: نحوه استفاده از دستور select در داخل update در stored procedure



mojde_171261
یک شنبه 24 آذر 1387, 16:59 عصر
با سلام

من در داخل برنامه ام یه همچین کدی دارم


for (int j = 0; j <= listbox_count - 1; j++)
{

SqlConnection con = newSqlConnection(ConStr);
SqlCommand com = newSqlCommand("UPDATE CategoryTable " +
"SET Olaviyat = @ol " +
"WHERE (CategoryPK = @categorypk)", con);
com.Parameters.AddWithValue("@ol", (j + 1).ToString());
com.Parameters.AddWithValue("@categorypk", arr2[j].ToString());
con.Open();
com.ExecuteNonQuery();

}


همانطور که می بیندید place holder های اون یه آرایه است که هردفعه در هر بار اجرای حلقه یکی از مقادیر update می شه اگه بخوام این قطعه کد را به صورت یه stored procedure بنویسم باید چه کار کنم

لازمه بگم که خودم آرایه را به صورت یه رشته از اعضای آرایه که با کاما از هم جدا شدن به یه stored procedure پاس دادم و توی اون از طریق یه function رشته رو پارز کردم که مقدار برگشتی این فانکشن درحقیقت یه data set است که از طریق یه select قابل دسترس است اما نمی دونم چه جوری اونو داخل دستور update قرار بدم
کسی هست که بتونه به من کمک کنه یا نه

با سپاس

AminSobati
یک شنبه 24 آذر 1387, 23:52 عصر
سلام،
وقتی اطلاعات رو به سمت SQL Server بردین و Parse کردین، میتونین یک حلقه درست کنین و Update رو انجام بدین. در صورت لزوم Cursor هم میشه استفاده کرد

ar.shirazi
سه شنبه 26 آذر 1387, 07:17 صبح
سلام،
وقتی اطلاعات رو به سمت SQL Server بردین و Parse کردین، میتونین یک حلقه درست کنین و Update رو انجام بدین. در صورت لزوم Cursor هم میشه استفاده کرد
جواب جناب ثباتی صحیح است و بهینه.
یک راه نه چندان بهینه دیگر هم هست و آن این که شما، ابتدا یک رشته حاوی چندنی دستور update بسازید و یک باره همه آن را اجرا کنید.

تولائی
سه شنبه 26 آذر 1387, 09:54 صبح
اینم یک روش دیگه که تو Sql Server 2005 به بعد می‌شه استفاده کرد.



drop TABLE [dbo].[___A]
go
CREATE TABLE [dbo].[___A](
[Id] [int] NOT NULL,
[Code] [int] NOT NULL,
CONSTRAINT [PK____A] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
go
insert into ___A values (2,1)
insert into ___A values (3,3)
insert into ___A values (4,5)
insert into ___A values (5,7)
select ROW_NUMBER() OVER(ORDER BY code) ROWNUMBER , * from ___A
update ___A
set code = ROWNUMBER
from ___A inner join (select ROW_NUMBER() OVER(ORDER BY code) ROWNUMBER , * from ___A) RowNumberedA
on ___A.Id = RowNumberedA.Id
select * from ___A