Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Implementasi SQL Server 2005 dari MySQL REPLACE INTO?

Ini adalah sesuatu yang mengganggu saya tentang MSSQL (kata-kata kasar pada blog saya ). Saya berharap MSSQL mendukung upsert .

Kode @Dillie-O adalah cara yang baik dalam versi SQL yang lebih lama (+1 suara), tetapi pada dasarnya masih merupakan dua operasi IO (exists lalu update atau insert )

Ada cara yang sedikit lebih baik di postingan ini , pada dasarnya:

--try an update
update tablename 
set field1 = 'new value',
    field2 = 'different value',
    ...
where idfield = 7

--insert if failed
if @@rowcount = 0 and @@error = 0
    insert into tablename 
           ( idfield, field1, field2, ... )
    values ( 7, 'value one', 'another value', ... )

Ini menguranginya menjadi satu operasi IO jika itu adalah pembaruan, atau dua jika dimasukkan.

MS Sql2008 memperkenalkan merge dari standar SQL:2003:

merge tablename as target
using (values ('new value', 'different value'))
    as source (field1, field2)
    on target.idfield = 7
when matched then
    update
    set field1 = source.field1,
        field2 = source.field2,
        ...
when not matched then
    insert ( idfield, field1, field2, ... )
    values ( 7,  source.field1, source.field2, ... )

Sekarang ini benar-benar hanya satu operasi IO, tetapi kode yang mengerikan :-(



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Menampilkan Susunan Koneksi Anda di MySQL

  2. masukkan data XML ke mysql dengan php

  3. Filter menurut COUNT(*)?

  4. Bagaimana cara mengambil versi saat ini dari sistem manajemen basis data MySQL (DBMS)?

  5. Permintaan MySQL menjadi liar?