PDA

View Full Version : سوال: ثبت چند رکورد یک جا باهم



antisocial
چهارشنبه 15 مهر 1388, 19:44 عصر
سلام
دوستان فرض کنید یه سری مقادیر آماده به صورت رشته ی آماده از داخل سی شارپ رو بخواهیم به صورت یک جا وارد یک جدول بکنیم.
برای این کار آیا راهی هست که تنها یکبار یک کوئری را اجرا کنیم بجای اینکه چندین بار (به تعداد رشته ها) فرمان اینسرت اجرا شود
ممنون میشم کمکم کنید

محمد سلیم آبادی
چهارشنبه 15 مهر 1388, 22:38 عصر
سلام،
می توانید با کمک عملگر UNION چندین سطر را با یکدیگر اجتماع کرده سپس با کمک دستور Insert Into Select همه را یکجا در جدول درج کنید.

antisocial
پنج شنبه 16 مهر 1388, 01:15 صبح
سلام،
می توانید با کمک عملگر UNION چندین سطر را با یکدیگر اجتماع کرده سپس با کمک دستور Insert Into Select همه را یکجا در جدول درج کنید.
ممنون .
میشه یک مثال بزنید.:خجالت:

In_Chan_Nafar
پنج شنبه 16 مهر 1388, 10:14 صبح
دوست عزيز من هم موافق ستم كه بايستي ترافيك ارسال اطلاعات مابين كالينت و سرور كم بشه شما مي توانيد يك SP‌در سرو تعريف كه پارامتر ورودي اون Table باشه (صرفا SQL 2008) و كليه رشته ها را به صورت يك زديف در TAble‌مربوطه درج و به عنوان پارامتر به SP بدهيد به اين تكنيك در SQL 2008 تكنيك TVP يا Table Value Parameter مي گوييم
بغد در SP‌با استفاده از دستور Select Insert اطلاعات را Table‌استخراج و در DB‌درج كني با سرعت بساير بالايي درج مي شود
مي تواني TVP را جستجو و مثال هاي اون را در C#‌و ... پيداد كني حتي مي تواني اون را با LINQ هم مچ كني

In_Chan_Nafar
پنج شنبه 16 مهر 1388, 10:18 صبح
براي تفهيم بيشتر به سايت زير يه سري بزن
http://lennilobel.wordpress.com/2009/07/

In_Chan_Nafar
پنج شنبه 16 مهر 1388, 10:19 صبح
براي تفهيم بيشتر به سايت زير يه سري بزن
http://lennilobel.wordpress.com/2009/07/

antisocial
سه شنبه 21 مهر 1388, 02:54 صبح
دوست عزيز من هم موافق ستم كه بايستي ترافيك ارسال اطلاعات مابين كالينت و سرور كم بشه شما مي توانيد يك SP‌در سرو تعريف كه پارامتر ورودي اون Table باشه (صرفا SQL 2008) و كليه رشته ها را به صورت يك زديف در TAble‌مربوطه درج و به عنوان پارامتر به SP بدهيد به اين تكنيك در SQL 2008 تكنيك TVP يا Table Value Parameter مي گوييم
بغد در SP‌با استفاده از دستور Select Insert اطلاعات را Table‌استخراج و در DB‌درج كني با سرعت بساير بالايي درج مي شود
مي تواني TVP را جستجو و مثال هاي اون را در C#‎‌و ... پيداد كني حتي مي تواني اون را با LINQ هم مچ كني
ممنون
اما اگر نسخه ی 2005 رو داشته باشیم یعنی راهی نداریم؟!

محمد سلیم آبادی
سه شنبه 21 مهر 1388, 04:17 صبح
میشه یک مثال بزنید.

فرض کنید که دو سطر زیر را داریم:
select 1 as col1, 2 as col2

select 2 as col1, 6 as col2

اگر بخواهم این دو سطر را جداگانه درج کنیم از کد زیر استفاده می کنیم

Insert into table_name
select 1 as col1, 2 as col2

Insert into table_name
select 2 as col1, 6 as col2

ولی اگر بخواهین با یک دستور Insert این دو سطر را در جدول در کنیم آن وقت داریم:

Insert Into Table_name
Select 1 as col1, 2 as col2
UNION ALL
Select 2 as col1, 6 as col2

آریوس1985
سه شنبه 21 مهر 1388, 12:21 عصر
سلام خدمت دوستان
من فکر میکنم از SqlBulkCopy استفاده کردن هم یک راه نسبتا خوبه.
msalim عزیز نظر شما چیه؟!
اصولا راهکارهای شما رو عالی هستن.ممنون میشم نظرت رو بگی

محمد سلیم آبادی
سه شنبه 21 مهر 1388, 17:59 عصر
من فکر میکنم از SqlBulkCopy استفاده کردن هم یک راه نسبتا خوبه.
msalim عزیز نظر شما چیه؟!
اصولا راهکارهای شما رو عالی هستن.ممنون میشم نظرت رو بگی

Bulk Insert بیشتر زمانی استفاده می شود که بخواهیم داده های حجیمی را انتقال دهیم. بله این هم می تونه یک راه حل باشه مثلا داده های هر سطر را با یک جداکننده به شکل یک خط در یک فایل متنی درج کنیم ...
من زیاد با سی شارپ کار نکردم ولی باید امکان درج سطرها در یک Datatable وجود داشته باشد و در نهایت داده های موجود در Datatable رو در جدول درج می کنیم.

اگر تعداد سطرهایی که قرار است درج شود زیاد نباشد، درج تک تک سطرها نباید زمان زیادی رو صرف کند.