Rumah pangkalan data tutorial mysql MSSQL Server 2008中的MERGE(不仅仅是合并)

MSSQL Server 2008中的MERGE(不仅仅是合并)

Jun 07, 2016 pm 03:09 PM
merge mssql server

就像标题呈现的一样,SQL Server 2008中的MERGE语句能做很多事情,它的功能是根据源表对目标表执行插入、更新或删除操作。最典型的应用就是进行两个表的同步。 下面通过一个简单示例来演示MERGE语句的使用方法,假设数据库中有两个表Product及ProductNew,我


  就像标题呈现的一样,SQL Server 2008中的MERGE语句能做很多事情,它的功能是根据源表对目标表执行插入、更新或删除操作。最典型的应用就是进行两个表的同步。

  下面通过一个简单示例来演示MERGE语句的使用方法,假设数据库中有两个表Product及ProductNew,我们的任务是将Product的数据同步到ProductNew(当然同步可能是每天通过Job来自动完成的,在此我们只关注MERGE的使用)。

  以下SQL创建示例表:

  --源表
  CREATE TABLE Product
  (
  ProductID varchar(7) NOT NULL PRIMARY KEY,
  ProductName varchar(100) NOT NULL,
  Price decimal(13,2) DEFAULT 0
  );

  INSERT INTO Product
  Values
  ("4100037","优盘",50),
  ("4100038","鼠标",30);

  --目标表
  CREATE TABLE ProductNew
  (
  ProductID varchar(7) NOT NULL PRIMARY KEY,
  ProductName varchar(100) NOT NULL,
  Price decimal(13,2) DEFAULT 0
  );
  

  下面再来关注MERGE语句的基本语法:

  MERGE 目标表

  USING 源表

  ON 匹配条件

  WHEN MATCHED THEN

  语句

  WHEN NOT MATCHED THEN

  语句;
  

  以上是MERGE的最最基本的语法,语句执行时根据匹配条件的结果,如果在目标表中找到匹配记录则执行WHEN MATCHED THEN后面的语句,如果没有找到匹配记录则执行WHEN NOT MATCHED THEN后面的语句。注意源表可以是表,也可以是一个子查询语句。

  格外强调一点,MERGE语句最后的分号是不能省略的!

  回到我们的示例,显然Product与ProductNew表的MERGE匹配条件为主键ProductID字段,初始情况下,ProductNew表为空,此时肯定执行的是WHEN NOT MATCHED THEN后的语句,我们先只考虑源表递增的情况,MERGE语句如下:

  MERGE ProductNew AS d
  USING
  Product
  AS s
  ON s.ProductID = d.ProductId
  WHEN NOT MATCHED THEN
  INSERT( ProductID,ProductName,Price)
  VALUES(s.ProductID,s.ProductName,s.Price);
  

  运行后2行受影响,我们已经将Product表的数据同步到了ProductNew表。

  现在,我们更新Product表4100037产品的价格,将其修改为55:

  UPDATE Product SET Price=55 WHERE ProductID="4100037";
  

  我们也希望每天同步的时候应该将更新后的价格同步到ProductNew表,显然此时在MERGE语句中应该添加WHEN MATCHED THEN 语句,该语句来更新ProductNew表的价格,添加匹配更新后的MERGE语句:

  MERGE ProductNew AS d
  USING
  Product
  AS s
  ON s.ProductID = d.ProductId
  WHEN NOT MATCHED THEN
  INSERT( ProductID,ProductName,Price)
  VALUES(s.ProductID,s.ProductName,s.Price)
  WHEN MATCHED THEN
  UPDATE SET d.ProductName = s.ProductName, d.Price = s.Price;
  

  执行后2行受影响,为什么是两行呢?因为我们的匹配条件只是按ProductID来关联的,这样匹配出来的记录为2行。另外,我们的UPDATE语句里面没有更新ProductID字段,因为这是完全没必要的(如果修改了ProductID字段会直接走到NOT MATCHED)。

  现在做个破坏,我们将410037产品删除掉:

  DELETE Product WHERE ProductID="4100037";
  

  明显,上面给出的MERGE语句无法同步这种情况,再次回到MERGE语句的定义,对MERGE的WHEN NOT MATCHED THEN语句稍作扩展:

  WHEN NOT MATCHED BY TARGET
  

  表示目标表不匹配,BY TARGET是默认的,所以上面我们直接使用WHEN NOT MATCHED THEN

  WHEN NOT MATCHED BY SOURCE
  

  表示源表不匹配,即目标表中存在,源表中不存在的情况。

  现在我们要完成源表DELETE后,目标表的同步动作,MERGE语句如下:

  MERGE ProductNew AS d
  USING
  Product
  AS s
  ON s.ProductID = d.ProductId
  WHEN NOT MATCHED BY TARGET THEN
  INSERT( ProductID,ProductName,Price)
  VALUES(s.ProductID,s.ProductName,s.Price)
  WHEN NOT MATCHED BY SOURCE THEN
  DELETE
  WHEN MATCHED THEN
  UPDATE SET d.ProductName = s.ProductName, d.Price = s.Price;
  

  上面已经使用到MERGE语句中的INSERT、UPDATE、DELETE语句,这足够完成大多数的同步功能了。当然,MERGE语句还有很多的选项,在此不做详述,请参考MSDN.

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menyambungkan php ke pangkalan data mssql Bagaimana untuk menyambungkan php ke pangkalan data mssql Oct 23, 2023 pm 12:02 PM

Kaedah untuk php menyambung ke pangkalan data mssql termasuk menggunakan sambungan MSSQL PHP, menggunakan PDO, dsb. Pengenalan terperinci: 1. Gunakan kaedah sambungan MSSQL PHP untuk memastikan bahawa PHP telah memasang sambungan MSSQL. Anda boleh menyemak sama ada sambungan mssql didayakan dalam fail konfigurasi PHP (php.ini 2. Gunakan kaedah PDO untuk memastikan bahawa PHP telah memasang sambungan PDO). Anda boleh menyemak sama ada sambungan pdo_sqlsrv didayakan dalam fail konfigurasi PHP (php.ini).

Panduan terperinci untuk memasang PHP dan mengkonfigurasi sambungan MSSQL pada Ubuntu Panduan terperinci untuk memasang PHP dan mengkonfigurasi sambungan MSSQL pada Ubuntu Feb 29, 2024 am 11:15 AM

Ubuntu ialah sistem pengendalian sumber terbuka popular yang biasa digunakan untuk menjalankan pelayan. Memasang PHP dan mengkonfigurasi sambungan MSSQL pada Ubuntu adalah salah satu operasi yang sering perlu dilakukan oleh banyak pembangun dan pentadbir sistem. Artikel ini akan memberikan pembaca panduan terperinci, termasuk langkah-langkah untuk memasang PHP, menyediakan Apache, memasang MSSQLServer, dsb., dan melampirkan contoh kod tertentu. Langkah 1: Pasang PHP dan sambungan yang berkaitan Pertama, kita perlu memasang PHP dan sambungan yang berkaitan untuk menyokong sambungan PHP

Cara memasang, menyahpasang dan menetapkan semula sandaran pelayan Windows Cara memasang, menyahpasang dan menetapkan semula sandaran pelayan Windows Mar 06, 2024 am 10:37 AM

WindowsServerBackup ialah fungsi yang disertakan dengan sistem pengendalian WindowsServer, direka untuk membantu pengguna melindungi data penting dan konfigurasi sistem, serta menyediakan penyelesaian sandaran dan pemulihan yang lengkap untuk perusahaan peringkat kecil, sederhana dan perusahaan. Hanya pengguna yang menjalankan Server2022 dan lebih tinggi boleh menggunakan ciri ini. Dalam artikel ini, kami akan menerangkan cara memasang, menyahpasang atau menetapkan semula WindowsServerBackup. Cara Menetapkan Semula Sandaran Pelayan Windows Jika anda mengalami masalah dengan sandaran pelayan anda, sandaran mengambil masa terlalu lama, atau anda tidak dapat mengakses fail yang disimpan, maka anda boleh mempertimbangkan untuk menetapkan semula tetapan sandaran Pelayan Windows anda. Untuk menetapkan semula Windows

Langkah terperinci untuk memasang PHP untuk menyokong pangkalan data MSSQL dalam persekitaran Ubuntu Langkah terperinci untuk memasang PHP untuk menyokong pangkalan data MSSQL dalam persekitaran Ubuntu Feb 29, 2024 am 10:39 AM

Langkah terperinci untuk memasang PHP untuk menyokong pangkalan data MSSQL dalam persekitaran Ubuntu Apabila membangunkan aplikasi web, anda sering menghadapi situasi di mana anda perlu menyambung ke pangkalan data Microsoft SQL Server (MSSQL). Dalam persekitaran Ubuntu, untuk menyambungkan PHP ke pangkalan data MSSQL, anda perlu memasang perisian yang berkaitan dan mengkonfigurasi tetapan yang sesuai. Seterusnya, kami akan memperkenalkan secara terperinci langkah-langkah untuk memasang PHP untuk menyokong pangkalan data MSSQL dalam persekitaran Ubuntu dan menyediakan kod khusus.

Versi pratonton Windows Server 2025 mengalu-alukan kemas kini, Microsoft menambah baik pengalaman ujian Insiders Versi pratonton Windows Server 2025 mengalu-alukan kemas kini, Microsoft menambah baik pengalaman ujian Insiders Feb 19, 2024 pm 02:36 PM

Sempena mengeluarkan versi Windows Server binaan 26040, Microsoft mengumumkan nama rasmi produk: Windows Server 2025. Turut dilancarkan ialah versi Windows11WindowsInsiderCanaryChannel build26040. Sesetengah rakan mungkin masih ingat bahawa bertahun-tahun yang lalu seseorang berjaya menukar Windows NT daripada mod stesen kerja kepada mod pelayan, menunjukkan persamaan antara pelbagai versi sistem pengendalian Microsoft. Walaupun terdapat perbezaan yang jelas antara versi semasa sistem pengendalian pelayan Microsoft dan Windows 11, mereka yang memberi perhatian kepada butiran mungkin tertanya-tanya: mengapa Windows Server mengemas kini jenama,

Bagaimana untuk mengubah suai nama versi Nginx untuk menyamarkan mana-mana pelayan web Bagaimana untuk mengubah suai nama versi Nginx untuk menyamarkan mana-mana pelayan web May 14, 2023 pm 09:19 PM

Bagaimana untuk mengubah suai nama lalai nginx, anda boleh menyamarkannya sedikit, atau anda boleh memasang Petua: Secara amnya, pengubahsuaian dibuat sebelum nginx disusun Selepas pengubahsuaian, kod tersebut perlu disusun semula seperti berikut: scr/core/nginx.conf#definenginx_version"1.4.7"#definenginx_ver"nginx/"n

Kaedah mudah dan jelas untuk menggunakan fungsi PHP array_merge_recursive(). Kaedah mudah dan jelas untuk menggunakan fungsi PHP array_merge_recursive(). Jun 27, 2023 pm 01:48 PM

Apabila pengaturcaraan dalam PHP, kita selalunya perlu menggabungkan tatasusunan. PHP menyediakan fungsi array_merge() untuk melengkapkan penggabungan tatasusunan, tetapi apabila kunci yang sama wujud dalam tatasusunan, fungsi ini akan menimpa nilai asal. Untuk menyelesaikan masalah ini, PHP juga menyediakan fungsi array_merge_recursive() dalam bahasa, yang boleh menggabungkan tatasusunan dan mengekalkan nilai kunci yang sama, menjadikan reka bentuk program lebih fleksibel. array_merge

Microsoft mengeluarkan pratonton Windows Server vNext versi 25335 Microsoft mengeluarkan pratonton Windows Server vNext versi 25335 Jan 10, 2024 am 08:49 AM

Semasa Microsoft mengeluarkan kemas kini pratonton Win11 untuk desktop, hari ini ia turut mengeluarkan pratonton Saluran Perkhidmatan Jangka Panjang (LTSC) Windows Server Build 25335. Seperti biasa, Microsoft tidak menerbitkan log perubahan yang lengkap, malah menyediakan catatan blog yang sepadan. Microsoft telah melaraskan log kemas kini versi pratonton Windows Server untuk menjadikannya sama dengan versi saluran Canary Jika tiada kandungan baharu diperkenalkan, catatan blog rasmi tidak akan disiarkan. Nota daripada Laman Utama IT: Jenama pelayan belum dikemas kini dan masih Windows Server 2022 dalam versi pratonton. Di samping itu, Microsoft memanggil versi ini Windows Server vNext dan bukannya versi Windows yang sudah ada di pasaran.

See all articles