sql >> Databasteknik >  >> RDS >> Mysql

SQL Server 2005 implementering av MySQL REPLACE INTO?

Det här är något som irriterar mig med MSSQL (rant på min blogg ). Jag önskar att MSSQL stödde upsert .

@Dillie-O:s kod är ett bra sätt i äldre SQL-versioner (+1 röst), men det är fortfarande i princip två IO-operationer (den finns och sedan uppdateringen eller infoga )

Det finns ett lite bättre sätt på det här inlägget , i princip:

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

Detta reducerar det till en IO-operation om det är en uppdatering, eller två om en insert.

MS Sql2008 introducerar merge från SQL:2003-standarden:

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

Nu är det egentligen bara en IO-operation, men hemsk kod :-(



  1. Hur man listar alla vyer i Oracle Database

  2. Hur man arbetar med datumfunktioner i Oracle sql

  3. SQL Server VÄLJ SISTA N rader

  4. Så här fixar du dubbelkodade UTF8-tecken (i en utf-8-tabell)