PDA

View Full Version : سوال: چگونگی درج سریعتر همزمان چندین رکورد!



mostafa_zainy
دوشنبه 25 مرداد 1389, 15:35 عصر
سلام دوستان
من یه رویه ذخیره شده با پارامترهای زیر دارم :

CREATE PROCEDURE Insert
@Type1Meghdar int ,
@Type2Meghdar int ,
@Type3Meghdar int , ... ,
@Type10Meghdar int
AS
BEGIN
insert into maghadir ( mtype , meghdar ) values (1,@Type1Meghdar)
insert into maghadir ( mtype , meghdar ) values (2,@Type1Meghdar)
insert into maghadir ( mtype , meghdar ) values (3,@Type1Meghdar)
...
insert into maghadir ( mtype , meghdar ) values (10,@Type1Meghdar)

end

آیا شما روش بهتری برای درج دارید ( این یک sp است که برای اطلاعات یک کالا که میتونه مقادیر مختلفی داشته باشه ، بصورت یکجا تمامی پارامترهاشو میگیره و هر پارامتر رو در یک رکورد ذخیره میکنه )، من روش فوق به ذهنم می رسه آیا میشه با سرعت بیشتری همزمان 10 یا بیشتر رکورد رو در یک جدول خاص ریخت؟

ahmad_eagle2002
دوشنبه 25 مرداد 1389, 16:46 عصر
مقادير رو از كجا مي خونيد

mostafa_zainy
دوشنبه 25 مرداد 1389, 16:52 عصر
مقادیر بصورت پارامتر به sp داده می شه

محمد سلیم آبادی
سه شنبه 26 مرداد 1389, 01:30 صبح
سلام،
شما می تونید از امکان table valued parameter - TVF (http://www.30sharp.com/article/13/169/1/%d9%85%d8%b9%d8%b1%d9%81%db%8c-%d9%be%d8%a7%d8%b1%d8%a7%d9%85%d8%aa%d8%b1-%d9%87%d8%a7%db%8c%db%8c-%d8%a7%d8%b2-%d9%86%d9%88%d8%b9-%d8%b3%d8%a7%d8%ae%d8%aa-%db%8c%d8%a7%d9%81%d8%aa%d9%87-%d8%af%d8%b1-sql-server-2008.aspx)کمک بگیرین در صورتی که در 2008 کار می کنید.
قانون کلی این هست که هر چه عبارات Insert کمتر باشند عملکرد و سرعت نیز افزایش پیدا می کند. پس اگر شما سطرهای مورد نظر را که می خواهید در SP درج کنید با همدیگر اجتماع کنید (union) سپس با کمک یک عبارت insert درج اتفاق خواهد افتاد. چیزی شبیه به این:

CREATE PROCEDURE Insert
@Type1Meghdar int ,
@Type2Meghdar int ,
@Type3Meghdar int , ... ,
@Type10Meghdar int
AS
BEGIN
insert into maghadir ( mtype , meghdar )
select 1, @Type1Meghdar union all
select 2, @Type2Meghdar union all
select 3, @Type3Meghdar union all
...
...
select 10, @Type10Meghdar;
end

یا حتی اگر از 2008 استفاده می کنید. کد بشکل قابل توجهی توسط VALUES خلاصه می شود یعنی:

CREATE PROCEDURE Insert
@Type1Meghdar int ,
@Type2Meghdar int ,
@Type3Meghdar int , ... ,
@Type10Meghdar int
AS
BEGIN
insert into maghadir ( mtype , meghdar )
values (1, @Type1Meghdar),
(2, @Type2Meghdar),
(3, @Type3Meghdar),
...
...
(10, @Type10Meghdar);
end

ASKaffash
سه شنبه 26 مرداد 1389, 08:53 صبح
سلام
کسی در مورد BULK INSERT اطلاعاتی دارد در اراکل برای درج دسته ای داده ها استفاده می شود در SQLServer ؟

محمد سلیم آبادی
چهارشنبه 27 مرداد 1389, 13:27 عصر
سلام
کسی در مورد BULK INSERT اطلاعاتی دارد در اراکل برای درج دسته ای داده ها استفاده می شود در SQLServer ؟

سلام،
بله در SQL Server هم برای درج داده ها توسط داده های موجود در یک فایل متنی که ستون ها و سطر های آن توسط کاراکترهایی چون کاما و اینتر از هم جدا شده اند استفاده میشه.
در Book Online راجب عملکرد و مقایسه آن با سایر روشهای در درج گروهی مطلب وجود دارد.