PDA

View Full Version : حرفه ای: انتقال اطلاعات رکورها



asd_moghadas
یک شنبه 10 آبان 1388, 08:13 صبح
باسلام به دوستان برنامه نویس
لطفا کمک کنید
من میخواهم رکوردهای یک جدول خاص را ازیک دیتابیس به یک دیتابیس دیگر دریک بازه زمانی که اطلاعات واردشده را به اطلاعات جدول دیگر اضافه کنم البته توانسته ام تمام رکوردهارو به یک جدول منتقل نمایم امامشکلم حل نشده چون من تعدادی رکورددارم که درفاصله 10روز اضافه شده ودرجدول دیگر است ومیخواهم انها را به اطلاعات قبلی اضافه کنم واطلاعات تکراری نیز حذف بشه لطفا کمک کنید من ازاین روشها جهت انتقال اطلاعات بین دوجدول اصتفاده کردم

UPDATE T1 SET Col1=T2.Col1, Col2=T2.Col2, Col3=T2.Col3
FROM T1 JOIN T2
ON T1.ID=T2.ID
///////////////////////////////////////
Insert Into Table2 (Field1,Field2,Field3)
Select Field1,Field2,Field3 From Table1 Where (Is_Active = 0)
Delete From Table1 Where Is_Active = 0
///////////////////////////////
INSERT INTO DB1.DBO.TABLE1 SELECT * FROM DB2.DBO.TABLE2
////////////////////////
select*into DestinationDB.dbo.DestinationTable
from SourceDB.dbo.SourceTable
/////////////////
SELECT * INTO NewTable FROM MyLink.MyDatabase.dbo.MyTable
//////////////
INSERT INTO sql.DBO.A1 SELECT * FROM sql.DBO.Andix1

امامشکل همچنان باقی است

محمد سلیم آبادی
یک شنبه 10 آبان 1388, 10:00 صبح
سلام،

من تعدادی رکورددارم که درفاصله 10روز اضافه شده ودرجدول دیگر است ومیخواهم انها را به اطلاعات قبلی اضافه کنم واطلاعات تکراری نیز حذف بشه
منظور از اطلاعات تکراری، تکراری بودن کلید اصلی دو جدول است؟ در این حالت بایستی ستون های جدول مقصد بر اساس ستون های جدول اول update شوند؟
و اگر مقادیر کلید اصلی دو جدول با یکدیگر match نشدند سپس سطرها در جدول هدف/مقصد insert شوند.

این مساله یک مساله ی معروف است که حتی به دلیل اینکه بسیار با اهمیت بود در نسخه SQL Server 2008 یک عملگر به نام MERGE معرفی شد.

با این توضیحات من سه راه حل متفاوت برای شما پیشنهاد خواهم کرد.
پیشنهاد اول:



--When match then update
Update T1
Set Col1 = T2.Col2,
Col2 = T2.Col2
From Table_1 AS T1
Inner Join Table_2 AS T2
On T1.id = T2.id

--When not match or not exists then insert
Insert Into Table_1
Select *
From Table_2 AS T2
Where Not Exists(Select *
From Table_1 AS T1
Where T1.id = T2.id)






پیشنهاد دوم: MERGE (http://www.barnamenevis.org/forum/showpost.php?p=835577&postcount=7)

پیشنهاد سوم: Row-By-Row Modification (http://www.barnamenevis.org/forum/showpost.php?p=835626&postcount=12)

asd_moghadas
یک شنبه 10 آبان 1388, 10:33 صبح
سلام وتشکر فراوان به دوست عزیز
من از sql 2005اکسپرس استفاده میکنم
کلیدهای اصلی مقدارمشابه درجدول ها میگیره تنها چیزی که دراین دوجدول فرق میکنه تاریخ ثبت رکورد ها دردوجدول میباشد ومن از روش سوم شما چیزی درک نکردم اگه ممکنه مختص توضیحی ...
یا راه مناسبتری

محمد سلیم آبادی
یک شنبه 10 آبان 1388, 16:37 عصر
شما می خواهین در جدول هدف سطرهایی را درج کنید که تکراری نباشند (که منظورتان از جمله ی سطرهای تکراری را حذف کنم باید همین باشد). که در راه حل اول و در query دوم یعنی
--When not match or not exists then insert
من به این موضوع اشاره کرده ام.