دسته بندی مقالات
- بیشتر -محصولات
- بیشتر -آخرین مقالات
- بیشتر --
security policy در Sql Server
1404/05/05 -
کنترل pageSetupDialog در سی شارپ
1404/05/03 -
نقش (Role) در Sql Server
1404/05/02 -
کنترل OpenFileDialog در سیشارپ
1404/04/31 -
ایجاد و مدیریت کاربر (User) در Sql Server
1404/04/30 -
کنترل MonthCalendar در سیشارپ
1404/04/29
دستور MERGE در SQL

MERGE در پایگاه داده SQL
دستور MERGE در SQL برای انجام عملیات INSERT، UPDATE و DELETE بهصورت ترکیبی روی یک جدول استفاده میشود.
این دستور معمولاً زمانی کاربرد دارد که بخواهیم دادههای یک جدول را با دادههای یک منبع دیگر (مانند یک جدول دیگر یا یک کوئری) هماهنگ کنیم.
MERGE ابتدا بررسی میکند که آیا رکوردهای منبع در جدول مقصد وجود دارند یا نه؛ اگر وجود داشته باشند، عملیات UPDATE انجام میشود، اگر وجود نداشته باشند، رکورد جدید INSERT میشود و در صورت نیاز، امکان DELETE کردن رکوردهای اضافی نیز وجود دارد.
ساختار MERGE از USING برای تعیین منبع داده، ON برای مشخص کردن شرط تطابق، و WHEN MATCHED یا WHEN NOT MATCHED برای تعیین عملیات استفاده میکند.
برای مثال، در یک سیستم مدیریت مشتریان، میتوان از MERGE برای بهروزرسانی اطلاعات مشتریانی که قبلاً ثبت شدهاند و افزودن مشتریان جدید استفاده کرد:
MERGE INTO Customers AS target
USING NewCustomers AS source
ON target.CustomerID = source.CustomerID
WHEN MATCHED THEN
UPDATE SET target.Name = source.Name, target.Email = source.Email
WHEN NOT MATCHED THEN
INSERT (CustomerID, Name, Email) VALUES (source.CustomerID, source.Name, source.Email);
این دستور ابتدا بررسی میکند که آیا CustomerID در جدول Customers وجود دارد یا نه؛ در صورت وجود، اطلاعات مشتری بهروزرسانی میشود و در غیر این صورت، یک رکورد جدید اضافه میشود.
مزایای استفاده از MERGE در سی شارپ
-
افزایش کارایی
به جای اجرای چندین دستور INSERT، UPDATE و DELETE، تنها یک بار از MERGE استفاده میشود. -
کاهش پیچیدگی کد
کدهای SQL کوتاهتر و خواناتر میشوند. -
بهینهسازی عملکرد
کاهش تعداد پرسوجوها باعث افزایش سرعت اجرا و بهینهسازی عملکرد پایگاه داده میشود. -
مدیریت بهتر دادهها
اطمینان از صحت و یکپارچگی دادهها در هنگام همگامسازی اطلاعات.
ساختار دستور MERGE
ساختار کلی دستور MERGE در SQL به صورت زیر است:
MERGE INTO <جدول مقصد> USING <جدول منبع>ON <شرط تطابق>WHEN MATCHED THEN UPDATE SET <ستونها = مقدارها>WHEN NOT MATCHED THEN INSERT (<ستونها>) VALUES (<مقدارها>);
توضیحات دستورات:
-
MERGE INTO <جدول مقصد>
تعیین جدولی که دادهها در آن درج یا بهروزرسانی میشوند. -
USING <جدول منبع>
تعیین جدول یا دادههای مرجع برای مقایسه. -
ON <شرط>
تعیین شرطی که تعیین میکند آیا رکوردها در هر دو جدول مطابقت دارند یا نه. -
WHEN MATCHED THEN UPDATE SET
زمانی که رکورد در هر دو جدول وجود دارد، مقادیر مشخصشده بهروزرسانی میشوند. -
WHEN NOT MATCHED THEN INSERT
اگر رکورد در جدول مقصد وجود نداشته باشد، یک رکورد جدید درج میشود.
🌟 آیا میخواهید به یک متخصص پایگاه داده تبدیل شوید و در دنیای فناوری اطلاعات بدرخشید؟
با دوره آموزشی SQL Server ما، شما میتوانید به راحتی و با روشی عملی، تمام مهارتهای لازم را یاد بگیرید!
این دوره به شما آموزش میدهد که چگونه دادهها را به بهترین شکل مدیریت کنید، گزارشهای قدرتمند بسازید و به تحلیلهای عمیق دست یابید.
با محتوای جذاب و پروژههای واقعی، شما نه تنها تئوری را یاد میگیرید، بلکه تواناییهای عملی خود را نیز تقویت میکنید.
پس فرصت را از دست ندهید! همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آینده شغلی روشنتر بردارید!
همین حالا شروع کنید و به دنیای دادهها بپیوندید!
مثالهای عملی از MERGE در SQL
-
همگامسازی دادهها بین دو جدول
فرض کنید دو جدول Customers_New (دادههای جدید مشتریان) و Customers (جدول اصلی مشتریان) داریم. هدف این است که اطلاعات جدید را در جدول Customers درج کرده یا در صورت وجود، آنها را بهروزرسانی کنیم.
MERGE INTO Customers AS TargetUSING Customers_New AS SourceON Target.CustomerID = Source.CustomerIDWHEN MATCHED THEN UPDATE SET Target.Name = Source.Name, Target.Email = Source.EmailWHEN NOT MATCHED THEN INSERT (CustomerID, Name, Email) VALUES (Source.CustomerID, Source.Name, Source.Email);
توضیح این مثال:
-
- مقایسه رکوردها بر اساس CustomerID در دو جدول.
- اگر مشتری در هر دو جدول وجود داشت، اطلاعات نام و ایمیل بهروزرسانی میشود.
- اگر مشتری در جدول مقصد (Customers) وجود نداشت، رکورد جدیدی درج میشود.
-
حذف دادهها با MERGE
گاهی لازم است که هنگام همگامسازی دادهها، برخی رکوردها که در جدول مقصد وجود دارند ولی در منبع نیستند، حذف شوند.
MERGE INTO Customers AS TargetUSING Customers_New AS SourceON Target.CustomerID = Source.CustomerIDWHEN MATCHED THEN UPDATE SET Target.Name = Source.Name, Target.Email = Source.EmailWHEN NOT MATCHED THEN INSERT (CustomerID, Name, Email) VALUES (Source.CustomerID, Source.Name, Source.Email)WHEN NOT MATCHED BY SOURCE THEN DELETE;
تفاوت این مثال با مثال قبلی:
در اینجا اگر رکوردی در جدول Customers_New وجود نداشته باشد، آن رکورد از جدول Customers حذف میشود.
نکات مهم برای بهینهسازی MERGE
-
استفاده از Indexes
افزودن ایندکس روی فیلدهای کلیدی مانند CustomerID میتواند باعث افزایش سرعت اجرای MERGE شود.
CREATE INDEX IDX_Customers_CustomerID ON Customers(CustomerID);
-
جلوگیری از Duplicate Records
قبل از اجرای MERGE، بررسی کنید که دادههای تکراری در جدول منبع وجود نداشته باشند.
SELECT CustomerID, COUNT(*)FROM Customers_NewGROUP BY CustomerIDHAVING COUNT(*) > 1;
-
استفاده از OUTPUT Clause برای Debugging
برای بررسی تأثیر اجرای MERGE میتوان از OUTPUT استفاده کرد.
MERGE INTO Customers AS TargetUSING Customers_New AS SourceON Target.CustomerID = Source.CustomerIDWHEN MATCHED THEN UPDATE SET Target.Name = Source.Name, Target.Email = Source.EmailWHEN NOT MATCHED THEN INSERT (CustomerID, Name, Email) VALUES (Source.CustomerID, Source.Name, Source.Email)OUTPUT $action, inserted.*, deleted.*;
این دستور نمایش میدهد که چه رکوردهایی INSERT، UPDATE یا DELETE شدهاند.
با استفاده از این راهنما، میتوانید از دستور MERGE برای بهبود عملکرد پایگاه داده خود استفاده کنید و دادههای خود را بهصورت کارآمد مدیریت کنید.
مثال پروژه محور از دستور MERGE در SQL
دستور MERGE در SQL برای ادغام دادهها از دو جدول مختلف به کار میرود.
این دستور میتواند برای مقایسه دادههای یک جدول با دادههای یک جدول دیگر و انجام عملیاتهایی مثل INSERT، UPDATE و DELETE استفاده شود.
در اینجا یک مثال پروژه محور برای دستور MERGE آورده شده است:
پروژه: مدیریت موجودی محصولات
فرض کنید که یک پایگاه داده برای مدیریت موجودی محصولات دارید و دو جدول به نامهای Products و ProductUpdates دارید.
جدول Products شامل اطلاعات اصلی محصولات است و جدول ProductUpdates شامل بروزرسانیهای جدیدی است که باید به جدول Products اعمال شوند.
جدولها به صورت زیر تعریف شدهاند:
CREATE TABLE Products (
ProductID INT PRIMARY KEY,
ProductName VARCHAR(100),
Quantity INT
);
CREATE TABLE ProductUpdates (
ProductID INT,
ProductName VARCHAR(100),
Quantity INT
);
سناریو
جدول ProductUpdates ممکن است حاوی تغییرات در موجودی محصولات باشد که باید به جدول Products اعمال شود.
حالا میخواهیم دادههای جدید را ادغام کنیم.
استفاده از دستور MERGE
MERGE INTO Products AS P
USING ProductUpdates AS PU
ON P.ProductID = PU.ProductID
WHEN MATCHED THEN
UPDATE SET P.Quantity = P.Quantity + PU.Quantity
WHEN NOT MATCHED BY TARGET THEN
INSERT (ProductID, ProductName, Quantity)
VALUES (PU.ProductID, PU.ProductName, PU.Quantity)
WHEN NOT MATCHED BY SOURCE THEN
DELETE;
توضیحات:
- MERGE INTO Products AS P: هدف ادغام دادهها در جدول Products است.
- USING ProductUpdates AS PU: دادهها از جدول ProductUpdates به کار گرفته میشوند.
- ON P.ProductID = PU.ProductID: شرط مقایسه برای تطبیق دادهها بر اساس ProductID است.
- WHEN MATCHED THEN UPDATE: اگر محصول در هر دو جدول وجود داشته باشد، موجودی در جدول Products به روز رسانی میشود.
- WHEN NOT MATCHED BY TARGET THEN INSERT: اگر محصول در جدول Products وجود نداشته باشد، یک رکورد جدید به جدول اضافه میشود.
- WHEN NOT MATCHED BY SOURCE THEN DELETE: اگر محصول در جدول ProductUpdates وجود نداشته باشد، رکورد مربوطه از جدول Products حذف میشود.
دوره های مرتبط

آموزش پایگاه داده SqlServer
پایگاه داده Sqlserver یکی از پایگاه داده های مهم برای ذخیره اطلاعات محسوب میشود .