PDA

View Full Version : انتقال اطلاعات از یک دیتابیس به دیتابیسی با جداول تقریبا متفاوت



mehdi-ghafari
دوشنبه 22 اسفند 1390, 15:16 عصر
سلام به همه دوستان
من یه دیتابیس دارم که تقریبا حدود 10.000 خبر توی جدول news ثبت شده.
حالا یکم تو نسخه جدید این جدول news تغییر کرده.
در مورد تغییرات :
در نسخه اول تمام اطلاعات هر خبر تنها در یک جدول واحد با نام news ذخیره میشد.
من اومدم دو نسخه جدید این تک جدول رو یه چند جدول تبدیل کردم . مثلا :
1) جدول News (که اطلاعات کلی از جمله : عنوان، خلاصه ، تصویر و ... رو در خودش جای میده که جدول اصلی هست و یک فیلد یکتا هم با نام ID داره)
2) جدول NewsText (که متن خبر رو تو خودش جای میده و با یک فیلد خروجی با نام NewsID با جدول News در ارتباطه )
حالا من میخوام بدونم چطور اطلاعات اون دیتابیس اول که تمام اطلاعات اخبار رو تنها در جدول News ریخته به دیتابیس جدید انتقال بدم که هر خبر تکه تکه و در چندتا جدول ذخیره میشه؟؟؟

ممنون میشم اگر راهنمایی بفرمائید.

mina_ghorbani
دوشنبه 22 اسفند 1390, 15:28 عصر
اول بايد جدول قديمي رو به ديتا بيس جديدت ببري (Import) كني
بعد با استفاده از insert اطلاعات قديمي رو به جدول جديد ببري
اون اطلاعات رو كه مي خواي تو جدول اول باشه select كن و insert كن در اين جدول
يه select ديگه هم واسه جدول دوم مي خواد

mina_ghorbani
دوشنبه 22 اسفند 1390, 15:46 عصر
مثلا _NEWS جدول قديمي باشه


INSERT

INTO dbo.News(NewsID,summary,Onvan,ax)

SELECT

Id,summary,Onvan,ax

FROM

dbo._news







INSERT

INTO dbo.NewsMatn(NewsID,Matn)

SELECT

Id,matn

FROM

dbo._news


بازم بستگي داره به جدولات ممكنه JOIN و .... بخواد

mehdi-ghafari
دوشنبه 22 اسفند 1390, 16:03 عصر
ممنون خانم قربانی.

1) توی جدول قدیمی فیلد ID از نوع Identity هست که خودکار افزایش پیدا کنه. اگر اطلاعات جدول قدیمی رو از طریق سلکت بریزم توی جدول جدید(که بازم فیلدی با نام ID و از نوع Identity داره) فیلد ID جدول جدید با مشکل مواجه نمی شه؟ بخاطر Identity بودنش؟

2) قاعدتا باید جداول دیگه هم که با این فیلد (فیلد ID در جدول نیوز) ارتباط دارن (مثل جدول NewsText با کلید خارجی با نام NewsID ک ه به فیلد ID جدول News در ارتباطه) مقدار NewsID شون با ID جدول News ست بشه.
اینو چکار باید کنم ؟
نمی دونم آیا منظورم رو درست رساندم یا خیر؟

tiphooo
دوشنبه 22 اسفند 1390, 19:44 عصر
با استفاده از Cursor می توانی انجام دهی به نحوی که بعد از درج در جدول اول آخرین id درج شده را بگیرید و بعد آن id را به عنوان کلید خارجی جدول دوم استفاده کنید

mehdi-ghafari
دوشنبه 22 اسفند 1390, 20:07 عصر
ممنونم از توجه تون
ولی بنظر شما آیا من نیاز ندارم که وقتی یک رکورد در جدول News اضاف کردم ID اون رو بگیرم و یک رکورد توی جدول NewsText با ID جدول News بزنم؟

mina_ghorbani
سه شنبه 23 اسفند 1390, 13:54 عصر
اون فيلدي كه تو جدول جديد identity هست موقتا از identity در بيار اطلاعات رو انتقال بده دوباره identity كن درست مي شه
چون كليد خارجي به جدول ديگه داري و بايد اطلاعات با هم بخونه چاره ا ينداري كه اين كار رو انجام بدي

mehdi-ghafari
سه شنبه 23 اسفند 1390, 16:56 عصر
ممنونم از توجهتون
همین کار رو انجام میدم و اگر مشکلی بود مطرح میکنم.
ولی قبل از اون :

اول بايد جدول قديمي رو به ديتا بيس جديدت ببري (Import) كني
یک سری از جداول قویم و جدید با هم همنام هستن. مثلا News یا NewsText و .../ اینو چکار کنم؟

mina_ghorbani
چهارشنبه 24 اسفند 1390, 04:36 صبح
اونا رو با یه اسم جدید ببر داری import می کنی می تونی اسمشون رو تغییز بدی یه "_" اول اسم جدولات بنداز

mehdi-ghafari
سه شنبه 23 خرداد 1391, 14:44 عصر
دوستان اگر نحوه import کردن این جداول رو هم بفرمائید ممنون میشم

barnamenevisforme
سه شنبه 23 خرداد 1391, 15:11 عصر
سلام
روشی که دوستان فرمودن،صحیحه،ولی بنده راهی رو به شما پیشنهاد میکنم که فکر میکنم راحتتر و اصولی تر باشه.
روی نام جدولی که میخوای data رو توی اون وارد کنی،راست کلیک کن، all task/import data جدولی که اطلاعات توی اون قرار داره،البته نام database مربوطه رو انتخاب کن،در مرحله بعد نام database جدید رو انتخاب کن،در مراحل بعد مشخص میکنید که دقیقا چه فیلد هایی از چه جدولی به جدول مورد نظر وارد بشه(میتونی از امکان query اوناستفاده کنی)
یه run میزنی جدول رو واست پر میکنه.نیازی به تغییر option identity هم نیست.
خوش باشی.

mehdi-ghafari
سه شنبه 23 خرداد 1391, 16:11 عصر
بسیار سپاسگزارم.
ولی توی نسخه express این گزینه ای که فرمودید نیست؟

baktash.n81@gmail.com
سه شنبه 23 خرداد 1391, 17:04 عصر
سلام

لازم نیست که حتما جداول رو توی یک DataBase داشته باشی ... می تونی توی 2 تا database بزرایشون ... و یک Query بنویسی که از از DataBase اول به دومی اطلاعات رو انتقال بدی ... (اینم واقعا لازم نیست اگه دوتا سرور Sql همدیگرو ببینند کفایت می کنه)

برای اینکه اطلاعات رو از جدول قدیمی به جداول جدید ببری روش های مختلفی وجود داره ... اگه انتقال اطلاعات دارای پیچیدگی های خاصی هست بهتره از cursor استفاده کنی اما اگه به همون سادگیه که گفتی روش Insert و Select بهتر و سریعتر هست ...

برای Identity هم می تونی قبل از Query این کد رو بنویسی که اجازه بده Identity هارو Insert کنی ...

SET IDENTITY_INSERT [ database_name . [ schema_name ] . ] table { ON | OFF }

SReza1
سه شنبه 23 خرداد 1391, 18:29 عصر
يه نگاهي به اين بنداز

http://barnamenevis.org/showthread.php?345670
در مورد SSIS هست. سرويس فوق العاده‌اي است