Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Implementacja MySQL w SQL Server 2005 ZAMIENIĆ NA?

To jest coś, co mnie denerwuje w MSSQL (rant na mój blog ). Chciałbym, żeby MSSQL wspierał upsert .

Kod @Dillie-O jest dobrym sposobem w starszych wersjach SQL (+1 głos), ale nadal są to zasadniczo dwie operacje IO (exists a następnie update lub insert )

Jest nieco lepszy sposób na ten post , w zasadzie:

--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', ... )

Zmniejsza to do jednej operacji IO, jeśli jest to aktualizacja, lub dwóch, jeśli jest to wstawka.

MS Sql2008 wprowadza merge ze standardu 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, ... )

Teraz to naprawdę tylko jedna operacja IO, ale okropny kod :-(



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak utworzyć i wstawić obiekt JSON za pomocą zapytań MySQL?

  2. W jakiej kolejności są przetwarzane ograniczenia ON DELETE CASCADE?

  3. Jak przesłać obrazy do bazy danych MySQL za pomocą kodu PHP?

  4. Utwórz procedurę składowaną MySQL za pomocą JPA Hibernate

  5. PHP:Pobieranie obrazu z MySQL Blob bezpośrednio do tagu <img>