PDA

View Full Version : سوال: کپی یک جدول از یک دیتابیس به دیتابیس دیگه؟



mojtaba-saleh
چهارشنبه 02 دی 1388, 00:36 صبح
سلام
برای کپی یک جدول از یک دیتابیس به دیتابیس دیگه در Sql Express 2005 (دیتابیس های فایلی .mdf) چه کاری باید انجام داد؟
آیا میشه تو این نوع دیتابیس ها از دستور select * into استفاده کرد؟
کانکشن استرینگم اینه :


Dim objcon As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Data\Database.mdf;Integrated Security=True;User Instance=True")
می خوام مثلا جدول MyTable رو از دیتابیس با کانکشن استرینگ بالا به دیتابیسی با این کانکشن استرینگ کپی کنم



Dim objcon As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Data\Database2.mdf;Integrated Security=True;User Instance=True")

mojtaba-saleh
چهارشنبه 02 دی 1388, 00:46 صبح
چون حجم اطلاعاتی که میخوام کپی کنم بالاست , به یه روش سریع نیاز دارم
میتونستم با دیتا ریدر بخونم و تو همون خوندن اونو توی دیتابیس دوم Insert کنم , ولی این روش یکم برای 50,000 رکورد زیادی طول میکشه

f.nabavi
چهارشنبه 02 دی 1388, 10:07 صبح
بسته به اینکه جدول مقصد از قبل وجود داشته باشه یا نه باید عبارت های متفاوت استفاده کنی:
اگر جدول مقصد وجود داشته باشد:

insert Des_table_name (feild list) select (feild list) from source_table_name
اگر جدول مقصد وجود نداشته باشه:

select (field list) into des_table_name from source_table_name

mojtaba-saleh
چهارشنبه 02 دی 1388, 10:37 صبح
دوست عزیز , من دوتا دیتابیس جداگونه دارم.
این کد ها رو میدونم , نمی دونم چجوری به دیتابیس دیگه کپی کنم؟!
اگه دیتابیس هام توی لوکال بود , می تونستم از این کدها استفاده کنم , ولی دیتابیس های من AttachDBFile هست! مشکلم اینجاست

f.nabavi
چهارشنبه 02 دی 1388, 11:03 صبح
اگر دیتا بیس ها روی دوتا سرور جداگانه باشه، باید از linked_server استفاده کنی که اطلاعاتش رو در بخش sql میتونی پیدا کنی. اگر دیتابیس ها روی یک سرور باشن از همون کد بالا استفاده کن ولی قبل از اسم جدول های مبدا و مقصد اسم دیتا بیس ها رو بنویس. ممکنه به خاطر نام schema بهت ارور بده. در این صورت نام schema رو وارد نکن.
مثلا اطلاعات table1 از دیتابیسdb1 رو به table2 از db2 کپی میکنیم:

insert db2.table2 (f1,f2) select (f1,f2) from db1.table1 من اینجا اسم schema رو نیاوردم. اگر با این کد ارور گرفتی متن اون رو بذار تا مشکل رو برطرف کنیم. بهتره قبل از اینکه کدهای برنامه رو بنویسی داخل محیط sqlserver اون رو امتحان کنی

mojtaba-saleh
شنبه 05 دی 1388, 00:50 صبح
سلام
با روش هایی که گفتید به نتیجه ای نرسیدم
این کد رو یهجایی پیدا کردم ولی SQL بهش گیر میده , روشی نیست که این کد رو بشه یه کاریش کرد رو Sql 2005 Express هم جواب بده؟ یا کد مشابه؟


INSERT INTO OPENDATASOURCE ('Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|shir.mdf;Integrated Security=True;User Instance=True;')... table SELECT * FROM Alamak

mojtaba-saleh
شنبه 05 دی 1388, 00:51 صبح
راستش اصل کار من برای پشتیبان گیری از یه جدوله که میخوای توی یک فایل mdf دیگه ذخیره بشه.
با این کد تونستم از کل دیتابیسم backup بگیرم , حالا نیاز دارم به صورت تکی هم از جداول بتونم backup بگیرم



Backup DATABASE [" & Application.StartupPath & "\Data\Database.mdf] To DISK ='" & SDialog.FileName & "'"


یه سوال دیگه , اگه اینم بشه , تقریبا مشکلم حل میشه , آیا میشه یه جدول خاص رو از بک آپی که با کد بالا گرفته میشه رو Restore کرد؟
برای Restore بک آپی که با کد بالا می گیرم از این کد استفاده می کنم:


USE Master ALTER DATABASE [" & Application.StartupPath & "\Data\Database.mdf] SET SINGLE_USER WITH ROLLBACK IMMEDIATE Restore DATABASE [" & Application.StartupPath & "\Data\Database.mdf] FROM DISK ='" & SDialog.FileName & "'"

acreza
یک شنبه 18 تیر 1391, 15:46 عصر
دقیقا مشکل من هم همینه ولی نمیشه . باید چی کار کنم
در ویژوال استادیو دات 2010 با استفاده از sql expreess دو تا دیتابیس اتچ کردم از جدول یکی از این دیتابیس ها میخواهم در جدول دیتابیس دیگر دیگه کپی کنم هردو جدول هم وجود دارند وقتی از دستور زیر استفاده کنم

insert db2.table2 (f1,f2) select (f1,f2) from db1.table1

میگه syntax اشتباه هستش


Error Source: .Net SqlClient Data Provider
Error Message: Incorrect syntax near ','





از طریق کد نویسی هم مشکل دارم
حدود صدتا رکورد را که کپی مکنه خطا میده فکر کنم مال اینه که مرتب کاکشن باز و بسته میشه




query1 = "select * from movaghati ";

SqlCommand cmd1 = new SqlCommand(query1,con1);
SqlDataReader dr;

con1.Open();

dr = cmd1.ExecuteReader();



while (dr.Read())
{

query2 = "insert into Vokala(Fullname,State,City,No,Adress,Tel,Mobile)" +
" values('" + dr["fullname"] + "','" + dr["state"] + "','" + dr["city"] + "','" + dr["No"] + "','" + dr["adress"] + "','" + dr["tel"] + "','" + dr["mobile"] + "')";

con2.Open();


SqlCommand cmd2 = new SqlCommand(query2, con2);


cmd2.ExecuteNonQuery();
con2.Close();
}



con1.Close();