در مواقعی ممکن است نیاز داشته باشیم که جدول یا جدولهایی از یک پایگاه داده را به یک پایگاه داده دیگر انتقال دهیم. در این مقاله قصد داریم روند انجام این کار را هم به صورت کوئری و هم به صورت ویزارد(گرافیکی) انجام دهیم.
برای شروع کار ابتدا دو دیتابیس به اسمهای databasefrm و databaseto میسازیم. دیتابیس databasefrm شامل یک جدول به اسم emp با سه فیلد ID,Name,Address میباشد. قصد داریم جدول tmp از دیتابیس databasefrm را به دیتابیس databaseto انتقال دهیم. برای انجام این کار، یکی از روشهای زیر را استفاده خواهیم کرد:
روش 1 : استفاده از کوئری
ساختار کلی انجام این عمل به صورت زیر خواهد بود:
مثال :
با اجرای دستور فوق یک کپی از جدول emp به همراه تمامی دادههای آن به دیتابیس databaseto منتقل و ایجاد میشوند. اگر بخواهیم تمامی ایندکسها، تریگرها و قیدها (Constraint) نیز منتقل شوند، برای اینکار نیاز به تولید یک اسکریپت خواهد بود (در ادامه).
حال اگر بخواهیم یک کپی از جدول را در دیتابیس جاری ایجاد کنیم، ساختار آن به صورت زیر خواهد بود :
که نمونه ای از آن برای دیتابیس ما به صورت زیرخواهد بود :
میتوانیم فقط فیلدهایی مشخص را به جدول دیگر کپی کنیم. برای انجا این کار کافیست به جای * اسم فیلدهای مورد نیاز را نوشت که ساختار دستوری آن به صورت زیر است :
که برای مثال ما به صورت زیر خواهد بود :
بعد از اجرای کوئری فوق نتیجه به صورت زیر خواهد بود :
برای شروع کار ابتدا دو دیتابیس به اسمهای databasefrm و databaseto میسازیم. دیتابیس databasefrm شامل یک جدول به اسم emp با سه فیلد ID,Name,Address میباشد. قصد داریم جدول tmp از دیتابیس databasefrm را به دیتابیس databaseto انتقال دهیم. برای انجام این کار، یکی از روشهای زیر را استفاده خواهیم کرد:
روش 1 : استفاده از کوئری
ساختار کلی انجام این عمل به صورت زیر خواهد بود:
Select * into DestinationDB.dbo.tableName from SourceDB.dbo.SourceTable
select * into databaseto.dbo.emp from databasefrm.dbo.Emp
حال اگر بخواهیم یک کپی از جدول را در دیتابیس جاری ایجاد کنیم، ساختار آن به صورت زیر خواهد بود :
select * into newtable from SourceTable
select * into emp1 from emp
میتوانیم فقط فیلدهایی مشخص را به جدول دیگر کپی کنیم. برای انجا این کار کافیست به جای * اسم فیلدهای مورد نیاز را نوشت که ساختار دستوری آن به صورت زیر است :
select col1, col2 into <destination_table> from <source_table>
select Id,Name into databaseto.dbo.emp1 from databasefrm.dbo.Emp
بعد از اجرای کوئری فوق نتیجه به صورت زیر خواهد بود :
کد فوق باعث کپی کردن فیلدهای Id,Name شده است.
اگر بخواهیم فقط ساختار جدول را کپی کنیم روند کار به صورت زیر خواهد بود :
select *into <destination_database.dbo.destination table> from _ <source_database.dbo.source table> where 1 = 2
که نمونه ای از آن برای مثال ما به صورت زیر خواهد بود :
کاربرد where در دستور فوق برای این است که عنوان فیلدها را بگیریم و در جدول دیگری ذخیره کنیم.
نکته: هر وقت نیاز بود که فقط فیلدهای یک جدول را دریافت کنید، میتواند از کدی همانند فوق استفاده کنید؛ با یک شرط که همیشه false برگرداند. ولی راه بهتری که توصیه میکنم استفاده از Top در دستور Select میباشد. نمونهای از دستور فوق:
همانطور که مشاهده میکنید دیگر در دستور فوق خبری از where نیست.
روش 2: ویزارد
جهت تهیه کارهای فوق به صورت ویزارد، به صورت خلاصه فقط به روند انجام کار بسنده میکنیم:
1- SSMS را باز کنید.
2- بر روی دیتابیس مورد نظر کلیک راست کرده و از منوی ظاهر شده Task را انتخاب نموده و در کادر بازشو Export data را انتخاب کنید.
3- در پنجرهی ظاهر شده بر روی دکمه next کلیک کرده و در پنجره بعدی، نوع اعتبار سنجی را انتخاب کرده و دیتابیس مورد نظر را انتخاب نمایید (databasefrm).
4- همانند مرحله 3 است با این تفاوت که اینبار دیتابیس مقصد را انتخاب میکنیم (databaseto).
5- در پنجرهی بعدی گزینه اول را انتخاب کرده (copy data from ...) و بعد از کلیک بر روی next در پنجره ظاهر شده، جدول یا جداول مورد نظر را انتخاب کنید.
روش 3 : تولید اسکریپت
با استفاده از دو روش فوق فقط میتوانستیم ساختار جداول و دادههای آن را انتقال بدهیم. برای انتقال کامل جداول مثل تریگرها، قیدها و ... میبایست از جدول یا جداول اسکریپت تولید و در نهایست اسکریپت را اجرا نماییم.
select * into databaseto.dbo.emp from databasefrm.dbo.emp where 1 = 2
نکته: هر وقت نیاز بود که فقط فیلدهای یک جدول را دریافت کنید، میتواند از کدی همانند فوق استفاده کنید؛ با یک شرط که همیشه false برگرداند. ولی راه بهتری که توصیه میکنم استفاده از Top در دستور Select میباشد. نمونهای از دستور فوق:
select top(0) * into databaseto.dbo.emp from databasefrm.dbo.emp
روش 2: ویزارد
جهت تهیه کارهای فوق به صورت ویزارد، به صورت خلاصه فقط به روند انجام کار بسنده میکنیم:
1- SSMS را باز کنید.
2- بر روی دیتابیس مورد نظر کلیک راست کرده و از منوی ظاهر شده Task را انتخاب نموده و در کادر بازشو Export data را انتخاب کنید.
3- در پنجرهی ظاهر شده بر روی دکمه next کلیک کرده و در پنجره بعدی، نوع اعتبار سنجی را انتخاب کرده و دیتابیس مورد نظر را انتخاب نمایید (databasefrm).
4- همانند مرحله 3 است با این تفاوت که اینبار دیتابیس مقصد را انتخاب میکنیم (databaseto).
5- در پنجرهی بعدی گزینه اول را انتخاب کرده (copy data from ...) و بعد از کلیک بر روی next در پنجره ظاهر شده، جدول یا جداول مورد نظر را انتخاب کنید.
روش 3 : تولید اسکریپت
با استفاده از دو روش فوق فقط میتوانستیم ساختار جداول و دادههای آن را انتقال بدهیم. برای انتقال کامل جداول مثل تریگرها، قیدها و ... میبایست از جدول یا جداول اسکریپت تولید و در نهایست اسکریپت را اجرا نماییم.
Right click on datbase >>Task>>Generate script>>next
انتخاب دیتابیس مورد نظر و بعد انتخاب مواردی که قصد داریم از آنها اسکریپت ایجاد کنیم و در پایان اسکریپت مورد نظر را بر روی دیتابیس مقصد (databaseto) اجرا میکنیم.
و در پایان نهایت تشکر را از تمام عزیزان و دوستان نویسندهی سایت دارم. امیدوارم در سال 94 شاهد موفقیتهای خوبی در حوزهی نرم افزار باشیم.
انتخاب دیتابیس مورد نظر و بعد انتخاب مواردی که قصد داریم از آنها اسکریپت ایجاد کنیم و در پایان اسکریپت مورد نظر را بر روی دیتابیس مقصد (databaseto) اجرا میکنیم.
و در پایان نهایت تشکر را از تمام عزیزان و دوستان نویسندهی سایت دارم. امیدوارم در سال 94 شاهد موفقیتهای خوبی در حوزهی نرم افزار باشیم.