مقدمه
قصد داریم شما را با دستور (Merge) در SQL Server آشنا کنیم، این دستور از SQL2008 معرفی شده است. دستور (Merge) در SQL Server یک دستور قدرتمند است که به شما امکان میدهد عملیات درج، بهروزرسانی یا حذف را بر روی جدول هدف بر اساس نتایج اتصال با جدول منبع انجام دهید. در اینجا یک آموزش اولیه برای کمک به شما در درک نحوه استفاده از دستور (Merge) آورده شده است.
مفاهیم
عبارت«MERGE» اساساً دادهها را از دو منبع در یک هدف ادغام میکند. این به ویژه در سناریوهایی مفید است که شما نیاز به همگام سازی دو جدول با درج، به روز رسانی یا حذف رکوردها در یک جدول بر اساس تفاوت های موجود در جدول دیگر دارید.
ساختار آن به شکل زیر می باشد :
MERGE INTO target_table AS target
USING source_table AS source
ON target.key_column = source.key_column
WHEN MATCHED
THEN UPDATE SET target.column1 = source.column1, ...
WHEN NOT MATCHED BY TARGET
THEN INSERT (column1, column2, ...) VALUES (source.column1, source.column2, ...)
WHEN NOT MATCHED BY SOURCE
THEN DELETE;
اجزا
Target Table : جدولی که قرار است به روز شود.
Source Table : جدولی که داده ها از آن بازیابی می شوند.
ON Clause : شرط ادغام را تعریف می کند. این معمولاً مطابق با کلید اصلی یا یک کلید منحصر به فرد است.
When Matched : این بند اقدامی را مشخص میکند که وقتی ردیفهای جداول هدف و منبع مطابقت دارند، انجام شود. به طور کلی، این شامل به روز رسانی سوابق موجود است.
WHEN NOT MATCHED BY TARGET : این بند اقدامی را مشخص می کند که وقتی ردیف های جدول منبع مطابقت ندارند در جدول هدف انجام شود. اغلب برای درج رکوردهای جدید استفاده می شود.
WHEN NOT MATCHED BY SOURCE : (اختیاری) این بند اقدامی را مشخص می کند که وقتی ردیف های جدول هدف در جدول منبع مطابقت ندارند، انجام شود. اغلب برای حذف سوابق استفاده می شود.
مثال
تصور کنید یک جدول «Products» به عنوان هدف و یک جدول «NewProducts» به عنوان منبع دارید. شما می خواهید که:
· محصولات موجود را با جزئیات جدید به روز کنید.
· محصولات جدیدی را که در جدول «Products» وجود ندارند اضافه کنید.
· محصولاتی که دیگر در جدول «NewProducts» نیستند را حذف کنید.
MERGE INTO Products AS P
USING NewProducts AS NP
ON P.ProductID = NP.ProductID
WHEN MATCHED
THEN UPDATE SET P.Name = NP.Name, P.Price = NP.Price
WHEN NOT MATCHED BY TARGET
THEN INSERT (ProductID, Name, Price) VALUES (NP.ProductID, NP.Name, NP.Price)
WHEN NOT MATCHED BY SOURCE
THEN DELETE;
تذکر
- از transaction control برای اطمینان از یکپارچگی داده ها استفاده کنید.
- در مورد «WHEN NOT MATCHED BY SOURCE THEN DELETE» احتیاط کنید زیرا می تواند ردیف ها را ناخواسته حذف کند.
- ابتدا عبارت «MERGE» خود را با عبارت «SELECT» آزمایش کنید تا متوجه شوید چه تغییراتی ایجاد خواهد شد.
نتیجه گیری
عبارت «MERGE» یک ابزار همه کاره در SQL Server برای مدیریت کارآمد داده های جدول است. این به ویژه برای فرآیندهای ETL، انبار داده ها، و همگام سازی داده ها بین جداول مفید است. با این حال، به دلیل پتانسیل آن برای ایجاد تغییرات قابل توجه در داده ها، استفاده دقیق از آن، به ویژه در محیط های تولید، مهم است.