Articles of upsert

syntax para MERGE / upsert de linha única no SQL Server

Eu estou tentando fazer uma única linha de inserção / atualização em uma tabela, mas todos os exemplos lá fora são para conjuntos. Alguém pode corrigir minha syntax por favor: MERGE member_topic ON mt_member = 0 AND mt_topic = 110 WHEN MATCHED THEN UPDATE SET mt_notes = ‘test’ WHEN NOT MATCHED THEN INSERT (mt_member, mt_topic, […]

Como descobrir se um upsert foi uma atualização com o PostgreSQL 9.5+ UPSERT?

CTEs graváveis ​​foram considerados uma solução para o UPSERT antes de 9.5, conforme descrito em Insert, em atualização duplicada no PostgreSQL? É possível executar um UPSERT com as informações, seja como um UPDATE ou um INSERT com o seguinte idioma de CTEs graváveis: WITH update_cte AS ( UPDATE t SET v = $1 WHERE id […]

Inserir atualização do procedimento armazenado no SQL Server

Eu escrevi um procedimento armazenado que fará uma atualização se houver um registro, caso contrário ele fará uma inserção. Parece algo como isto: update myTable set Col1=@col1, Col2=@col2 where ID=@ID if @@rowcount = 0 insert into myTable (Col1, Col2) values (@col1, @col2) Minha lógica por trás de escrevê-lo dessa maneira é que a atualização executará […]

UPSERT atômico no SQL Server 2005

Qual é o padrão correto para fazer um “UPSERT” atômico (UPDATE onde existe, INSERIR caso contrário) no SQL Server 2005? Eu vejo muito código no SO (por exemplo, consulte Verificar se existe uma linha, caso contrário, insira ) com o seguinte padrão de duas partes: UPDATE … FROM … WHERE — race condition risk here […]

Como usar RETURNING com ON CONFLICT no PostgreSQL?

Eu tenho o seguinte UPSERT no 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 não houver conflitos, ele retorna algo assim: ———- | id | ———- 1 | 50 | ———- 2 | 51 | ———- Mas se houver conflitos, […]

Upserting em access ao MS

Eu preciso escrever uma consulta SQL para o MS-Access 2000 para que uma linha seja atualizada se existir, mas inserida se não existir. (Eu acredito que isso é chamado de “upsert“) ou seja Se a linha existe … UPDATE Table1 SET (…) WHERE Column1=’SomeValue’ Se não existe … INSERT INTO Table1 VALUES (…) Isso pode […]

SQLite INSERT – ON DUPLICATE KEY UPDATE

O MySQL tem algo parecido com isto: INSERT INTO visits (ip, hits) VALUES (‘127.0.0.1’, 1) ON DUPLICATE KEY UPDATE hits = hits + 1; Tanto quanto eu sei que esse recurso não existe no SQLite, o que eu quero saber é se existe alguma maneira de arquivar o mesmo efeito sem ter que executar duas […]

MongoDB: sub-documento upsert

Eu tenho documentos que se parecem com isso, com um índice exclusivo em bars.name : { name: ‘foo’, bars: [ { name: ‘qux’, somefield: 1 } ] } . Quero atualizar o subdocumento em que { name: ‘foo’, ‘bars.name’: ‘qux’ } e $set: { ‘bars.$.somefield’: 2 } , ou crie um novo sub-documento com { […]

Oracle: como UPSERT (atualizar ou inserir em uma tabela?)

A operação UPSERT atualiza ou insere uma linha em uma tabela, dependendo se a tabela já tiver uma linha que corresponda aos dados: if table t has a row exists that has key X: update t set mystuff… where mykey=X else insert into t mystuff… Como a Oracle não possui uma instrução UPSERT específica, qual […]

SELECT ou INSERT está em uma function propensa a condições de corrida?

Eu escrevi uma function para criar posts para um simples mecanismo de 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 […]