Articles of upsert

Come faccio AGGIORNARE una riga in una tabella o INSERISCI se non esiste?

Ho la seguente tabella di contatori: CREATE TABLE cache ( key text PRIMARY KEY, generation int ); Vorrei aumentare uno dei contatori, o impostarlo a zero se la riga corrispondente non esiste ancora. C’è un modo per farlo senza problemi di concorrenza in SQL standard? L’operazione a volte fa parte di una transazione, a volte […]

Inserisci Aggiorna stored proc su SQL Server

Ho scritto un proc memorizzato che farà un aggiornamento se esiste un record, altrimenti farà un inserto. Sembra qualcosa del genere: update myTable set Col1=@col1, Col2=@col2 where ID=@ID if @@rowcount = 0 insert into myTable (Col1, Col2) values (@col1, @col2) La mia logica dietro la scrittura in questo modo è che l’aggiornamento eseguirà una selezione […]

Come scoprire se un upsert è stato un aggiornamento di PostgerSQL 9.5+ UPSERT?

Le CTE scrivibili sono state considerate una soluzione per UPSERT prima di 9.5 come descritto in Insert, su aggiornamento duplicato in PostgreSQL? È ansible eseguire un UPSERT con le informazioni indipendentemente dal fatto che sia finito come UPDATE o INSERT con il seguente idioma Writable CTE: WITH update_cte AS ( UPDATE t SET v = […]

Come usare RETURNING con ON CONFLICT in PostgreSQL?

Ho il seguente UPSERT in PostgreSQL 9.5: INSERT INTO chats (“user”, “contact”, “name”) VALUES ($1, $2, $3), ($2, $1, NULL) ON CONFLICT(“user”, “contact”) DO NOTHING RETURNING id; Se non ci sono conflitti restituisce qualcosa di simile a questo: ———- | id | ———- 1 | 50 | ———- 2 | 51 | ———- Ma se […]

Come eseguire un UPSERT in modo da poter utilizzare sia nuovi che vecchi valori nella parte di aggiornamento

Stupido ma semplice esempio: supponiamo di avere una tabella “Item” in cui conservo i totali degli articoli che ricevono. Item_Name Items_In_Stock Il nome dell’articolo è la chiave principale qui. Come raggiungere il seguente quando mai ricevo l’articolo A in quantità X. Se l’articolo non esiste, inserisco un nuovo object registrato per l’articolo A e imposta […]

Upserting in accesso MS

Devo scrivere una query SQL per MS-Access 2000 in modo che una riga venga aggiornata se esiste, ma inserita se non lo è. (Credo che questo si chiami “upsert“) vale a dire Se la riga esiste … UPDATE Table1 SET (…) WHERE Column1=’SomeValue’ Se non esiste … INSERT INTO Table1 VALUES (…) Questo può essere […]

SQLite INSERT – ON DUPLICATE KEY UPDATE

MySQL ha qualcosa del genere: INSERT INTO visits (ip, hits) VALUES (‘127.0.0.1′, 1) ON DUPLICATE KEY UPDATE hits = hits + 1; Per quanto ne so, questa caratteristica non esiste in SQLite, quello che voglio sapere è se c’è un modo per archiviare lo stesso effetto senza dover eseguire due query. Inoltre, se questo non […]

MongoDB: upsert sub-document

Ho documenti che assomigliano a qualcosa del genere, con un indice univoco su bars.name : { name: ‘foo’, bars: [ { name: ‘qux’, somefield: 1 } ] } . Voglio aggiornare il sub-documento dove { name: ‘foo’, ‘bars.name’: ‘qux’ } e $set: { ‘bars.$.somefield’: 2 } , o crea un nuovo sotto-documento con { name: […]

Oracle: come UPSERT (aggiornare o inserire in una tabella?)

L’operazione UPSERT aggiorna o inserisce una riga in una tabella, a seconda che la tabella abbia già una riga che corrisponde ai dati: if table t has a row exists that has key X: update t set mystuff… where mykey=X else insert into t mystuff… Poiché Oracle non ha una specifica dichiarazione UPSERT, qual è […]

SELEZIONA o INSERISCI in una funzione soggetta a condizioni di gara?

Ho scritto una funzione per creare post per un semplice motore di blogging: CREATE FUNCTION CreatePost(VARCHAR, TEXT, VARCHAR[]) RETURNS INTEGER AS $$ DECLARE InsertedPostId INTEGER; TagName VARCHAR; BEGIN INSERT INTO Posts (Title, Body) VALUES ($1, $2) RETURNING Id INTO InsertedPostId; FOREACH TagName IN ARRAY $3 LOOP DECLARE InsertedTagId INTEGER; BEGIN — I am concerned about […]