PDA

View Full Version : انتقال اطلاعات بین 2 پایگاه داده



babak869
شنبه 25 اردیبهشت 1389, 20:57 عصر
با سلام
من میخوام اطلاعات یکی از جدولهای موجود در پایگاه داده MyDb1 رو به پایگاه داده MyDb2 که روی شبکه هست انتقال بدم (با کدنویسی دلفی) . برای این منظور استورپروسیجری نوشتم که این کاررو انجام میده اما زمانی درست عمل میکنه که هردو پایگاه داده روی یک سیستم باشند و اگر روی 2 پایگاه داده متفاوت باشند خطا میده.
دوستان اطلاعاتی در این زمینه دارند که چطور میشه اطلاعات بین 2 پایگاه داده متفاوت رو با استفاده از کدنویسی دلفی انجام داد؟ (بنده مباحث Replication رو میدونم و میخوام توی دلفی این کارر و انجام بدم)
با تشکر

حسین شهریاری
یک شنبه 26 اردیبهشت 1389, 10:20 صبح
سلام

فکر کنم با آدرس دهی سلسله مراتبی مشکل شما حل میشه:
اگه دو جدول در دو پایگاه داده و روی یه سرور باشند:

DatabaseName.dbo.TableName

اگه دو جدول در دو پایگاه داده و روی دو سرور باشند:

ServerName.DatabaseName.dbo.TableName

یا:

ServerName.ReplicationName.DatabaseName.dbo.TableN ame

برای ارسال هز طریق دلفی هم میتونین از Query استفاده کنین مثلا برای مورد اول به مثال زیر توجه کنید:

AdoQuery.sql.text:='Insert into DesTable select * from DBtest.dbo.SourTable';
\AdoQuery.ExecSql;

موفق باشید

babak869
یک شنبه 26 اردیبهشت 1389, 19:00 عصر
از توجه شما ممنونم.دیتابیسها روی دو سرور متفاوت و برروی دو کامپیوتر متفاوت هستند . در نوشتن کوئری یا استورپروسیجر مشکلی نیست . در ضمن نمیخوام که از Replication هم استفاده کنم. فکر میکنم اون تکه کدی که نام سرور رو باید اول نوشت به کار بیاد .شما خودتون اونو تست کردین؟

babak869
یک شنبه 26 اردیبهشت 1389, 20:11 عصر
و یه سوال دیگه
متن استورپروسیجر من به این شکله :


CREATE PROCEDURE [dbo].[MySp]
@name nvarchar(255) out,
@date_tanzim nvarchar(10) out

AS
INSERT INTO MyDB.dbo.Mytbl (
name,
date_tanzim
)
VALUES
(
@name,
@date_tanzim
)

و اسم سرور رو میتونم ازتوی برنامه بخونم.حالا چطور میتونم اونو توی کد بالا منظور کنم؟یعنی میشه بصورت یه پارامتر ارسالی این کار رو کرد مثلا :

INSERT INTO @Serv_Name.MyDB.dbo.Mytbl (

حسین شهریاری
یک شنبه 26 اردیبهشت 1389, 22:42 عصر
فکر کنم به احتمال زیاد بشه اون قسمت از دستور را پارامتریک وارد کرد!!

دوست عزیز ظاهر و باطن اطلاعات من توی این زمینه تا همین حد بود.اگه دیگه میخاین جواب قطعی را بدست بیارید پیشنهاد میکنم صورت سوال را به عنوان یه پیام خصوصی برای آقای امین ثباتی توی تالار SQL بفرستید ایشون حتما کمک میکنن.

موفق باشید

AminSobati
دوشنبه 27 اردیبهشت 1389, 15:01 عصر
سلام دوست عزیزم،
پست شماره 2 به خوبی شما رو راهنمایی میکنه. میتونین Linked Server تعریف کنین یا از OpenRowSet استفاده کنین تا با سرورهای دیگه تبادل اطلاعات داشته باشین.
نام سرور یا دیتابیس یا جدول نمیتونه پارامتر باشه مگر اینکه برین سراغ Dynamic TSQL

babak869
دوشنبه 27 اردیبهشت 1389, 18:06 عصر
جناب آقای ثباتی عزیز
از توجه شما ممنونم.
اگه امکان داره درباره مطالبی که فرمودید توضیحات بیشتری بدید . در ضمن آیا میشه بصورت زیر نام سرور رو دریافت کرد و توی پروسیجر نوشت؟


DECLARE @Conection_URL nvarchar(200)
DECLARE @SERVERE_NAME CHAR(50)

SELECT @SERVERE_NAME = @@SERVERNAME
--SELECT @SERVERE_NAME

SELECT @Conection_URL = RTRIM(@SERVERE_NAME) + '.MYDB.dbo.MYtbl'

SELECT * from @Conection_URL

GO

mehrpars
سه شنبه 28 اردیبهشت 1389, 02:07 صبح
سلام منم این مشکلو دارم،
من 2 تا دیتابیس دارم (sqlserver 2000) ، یکی local و دیگری روی وب هست .
Developer من دلفی هست
میخواستم بدونم چطور میتونم دیتابیس local رو آپدیت کنم ، البته تعداد رکوردهام زیاد هست (حدود 10 ، 12 هزار تا)
توی query ها مشکلی نیست ، فقط نحوه ارتباط (Synchronize بین دوتا دیتابیس) و روش صحیح اینکار با توجه به حجم زیاد رکورد ها.
ممنون از توجه دوستان

mehrpars
سه شنبه 28 اردیبهشت 1389, 02:17 صبح
آقای ثباتی از Tip یی که دادید ممنون
استفاده از LinkedServer :
http://msdn.microsoft.com/en-us/library/aa259589%28v=SQL.80%29.aspx