将 Oracle upsert 转换为 AzureSQL(T-SQL) 准备好的语句

Converting Oracle upsert to AzureSQL(T-SQL) prepared statement

我想将更新插入查询从 Oracle DB 迁移到 AzureSQL。下面显示了一个 Oracle 准备语句,它从 dual 中获取值并对 DUMMY table.

执行更新插入操作
MERGE INTO DUMMY a
USING (SELECT ? ID,
              ? NAME,
              ? SIZE from dual) b
ON (a.ID = b.ID)
WHEN MATCHED THEN
    UPDATE
    SET a.ID = b.ID,
        a.NAME = b.NAME,
        a.SIZE = b.SIZE
WHEN NOT MATCHED THEN
    INSERT(a.ID,
           a.NAME,
           a.SIZE)
    VALUES ( b.ID,
             b.NAME,
             b.SIZE)

我之前还要求从 Oracle 迁移到 Postgres。 是我问的 PostgreSQL 版本。我现在正在寻找一种转换成 AzureSQL 的方法。

更新 T-SQL。

MERGE dbo.table_name AS [Target]
USING (SELECT 1 AS Id, 'name' as t_name, 1 as size) AS [Source] 
   ON [Target].Id = [Source].Id
WHEN MATCHED THEN
  UPDATE SET [Target].name = [Source].t_name, [Target].size = [Source].size
WHEN NOT MATCHED THEN
  INSERT (Id, name, size) VALUES ([Source].Id, [Source].t_name, [Source].size); 

使用参数值准备源table

DECLARE @id int = 1,
        @name varchar(10) = 'ABC',
        @size int = 5

MERGE dbo.table_name AS [Target]
USING (SELECT @id AS Id, @name as t_name, @size as size) AS [Source] 
   ON [Target].Id = [Source].Id
WHEN MATCHED THEN
  UPDATE SET [Target].name = [Source].t_name, [Target].size = [Source].size
WHEN NOT MATCHED THEN
  INSERT (Id, name, size) VALUES ([Source].Id, [Source].t_name, [Source].size);

请检查 url https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=13d32c099991dc3001fe4a8cd0b3fc77