将 SQL 服务器查询转换为 h2 查询

Convert SQL Server query to h2 query

我一直在尝试在 h2 数据库中为我的集成测试用例编写以下 SQL 服务器查询。

UPDATE
  Test.Table1 WITH (UPDLOCK, SERIALIZABLE)
SET
  field1 = :val1,
  field6 = CURRENT_TIMESTAMP,
  field4 = :val4,
  field5 = :val5
WHERE
  field2 = :val2
  AND field3 = :val3;

IF @ @ROWCOUNT = 0 BEGIN
INSERT INTO
  Test.Table1(
    ID,
    field1,
    field2,
    field3,
    field4,
    field5,
    field6,
    field7,
    field8,
    field9
  )
VALUES
  (
    newid(),
    :val1,
    :val2,
    :val3,
    :val4,
    :val5,
    CURRENT_TIMESTAMP,
    :val4,
    :val5,
    CURRENT_TIMESTAMP
  );
END

我看到 rowcount 在 h2 中无效。因此尝试使用似乎也不起作用的 case 命令来编写。有人可以帮忙吗?

您可以在 SQL 服务器和 H2:

中使用相同的标准 MERGE 语句
MERGE INTO TEST.TABLE1
USING (SELECT :val1 V1, :val2 V2, :val3 V3, :val4 V4, :val5 V5) S
ON (FIELD2 = V2 AND FIELD3 = V3)
WHEN MATCHED THEN
UPDATE SET FIELD1 = V1, FIELD6 = CURRENT_TIMESTAMP, FIELD4 = V4, FIELD5 = V5
WHEN NOT MATCHED THEN
INSERT (ID, FIELD1, FIELD2, FIELD3, FIELD4, FIELD5, FIELD6, FIELD7, FIELD8, FIELD9)
VALUES (NEWID(), V1, V2, V3, V4, V5, CURRENT_TIMESTAMP, V4, V5, CURRENT_TIMESTAMP);

我假设您正在使用一些包装器将 :val* 替换为实际值。