PDA

View Full Version : اینزرت با تعداد بالا



SoheilKH
دوشنبه 25 اسفند 1382, 05:24 صبح
به نام خدا
یک جدول داریم که از دو تا فیلد از نوع int تشکیل شده است.
با توجه به ماهیت برنامه ، insert و delete در این جدول رکود های زیادی را تحت تاثیر قرار می دهد مثلا هر دفعه که insert داریم حدود 20 یا بیشتر رکورد اضافه می شوند.

یک استور پروسیجر نوشتم که دو تا پارامتر ورودی را می گیرد .یکی از این پارامتر ها مجموعه ای از اعداد که قرار است در جدول قرار گیرند قرار داده شده است که بوسیله "،" از هم جدا شده اند بوسیله یک حلقه while تمام این اعداد را میخوانم و در جدول درج می کنم.

تا اینجا مشکلی وجود ندارد برنامه خوب کار می کند اما مشکل وقتی ایجاد می شود که من در پارامتر مذکور تعداد زیادی از اعداد را قرار دهم .در این موقع خطای time out می دهد.

نمی دونم چی کار کنم .کسی از بچه ها می دونه مشکل کجاست. یا اینکه ایده ای برای درج با تعداد بالا سراغ داره .(از "IN" هم استفاده کردم اما خطای convert می ده)

hmm
دوشنبه 25 اسفند 1382, 06:56 صبح
آیا این رکورد ها از فایل متنی خوانده میشوند یا از یک جدول دیگه یا اصلا این اعداد از کجا می آیند
بگو تا ببینم میتونم مشکلت رو حل کنم

SoheilKH
دوشنبه 25 اسفند 1382, 07:51 صبح
از متغییر متنی
مثلا '10,12,12,13,59,26,15'
من تک تک اعداد را از این رشته در می آورم سپس در جدول درج می کنم

vadood
دوشنبه 25 اسفند 1382, 09:26 صبح
یک استور پروسیجر نوشتم که دو تا پارامتر ورودی را می گیرد

بهتره در مورد مشکلاتی درباره کد نوشته شده تون خود کد را هم بگذارید. این جوری بقیه بهتر می فهمند چه می خواهید بکنید و چه روشی انتخاب کردید.

SoheilKH
سه شنبه 26 اسفند 1382, 05:37 صبح
بفرمایید این هم اصل کد:

ALTER PROCEDURE AddSectionsRole

(
@RoleId int,
@StrSectionsId nvarchar(50)
)

AS
Set nocount off

declare @Keys nvarchar(50)
declare @X nvarchar(50)
declare @i int

set @i=1
set @x=(substring(@StrSectionsId,@i,1))
set @keys=''

while @x <> ';'
begin
set @x=(substring(@StrSectionsId,@i,1))
if @x=','
begin
insert into sectionRoles (SectionId,Roleid) values(@keys,@roleid)
set @keys=''
set @i=@i+1
end
else
begin
if @x=';'
begin
insert into sectionRoles (SectionId,Roleid) values(@keys,@roleid)
break
end
set @keys= @keys + @x
set @i=@i+1
end
end