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

yed2393

我想将更新插入查询从 Oracle DB 迁移到 AzureSQL。下面显示了一个 Oracle 准备好的语句,它从 dual 中获取值并对 DUMMY 表执行 upsert 操作。

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); 

使用参数值准备源表

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);

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章