Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

синтаксис за единичен ред MERGE / upsert в SQL Server

най-накрая получих синтаксиса на Upsert, използвайки MERGE в SQL Server 2008. Използвайки това, което Джейкъб иска да направите (Upsert):

IF EXISTS(SELECT * FROM member_topic WHERE mt_member = 0 AND mt_topic = 110)
BEGIN
    --update existing row
    UPDATE member_topic SET mt_notes = 'test'
    WHERE mt_member = 0
    AND mt_topic = 110
END
ELSE
BEGIN
    --insert new row
    INSERT INTO member_topic (mt_member, mt_topic, mt_notes)
    VALUES (0, 110, 'test')
END

Еквивалентният MERGE синтаксисът е:

MERGE member_topic
USING ( 
    VALUES (0, 110, 'test')
) AS foo (mt_member, mt_topic, mt_notes) 
ON member_topic.mt_member = foo.mt_member 
   AND member_topic.mt_topic = foo.mt_topic
WHEN MATCHED THEN
   UPDATE SET mt_notes = foo.mt_notes
WHEN NOT MATCHED THEN
   INSERT (mt_member, mt_topic, mt_notes)
   VALUES (foo.mt_member, foo.mt_topic, foo.mt_notes)
; --A MERGE statement must be terminated by a semi-colon (;).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изтриете първите 1000 реда от таблица с помощта на Sql Server 2008?

  2. Изпращане на имейл от тригер в SQL Server (T-SQL)

  3. Оценка на присъединяване на SQL Server с помощта на грубо подравняване на хистограма

  4. Как да вмъкна запис само със стойности по подразбиране?

  5. Регистър на транзакциите на SQL Server — част 1