【问题标题】:How do I convert given SQL query to SQL Server query?如何将给定的 SQL 查询转换为 SQL Server 查询?
【发布时间】:2020-09-02 12:15:34
【问题描述】:

我有一个 SQL 查询,我需要理解并转换为 SQL Server 查询。这是 SQL 查询:

MERGE INTO study_event
    USING dual
    ON (study_id = :study_id)
       WHEN NOT MATCHED THEN
       INSERT (study_id, study_date)
       VALUES (:study_id, :study_date)

根据我的理解,这意味着如果 study_event 表没有给出 study_id,我将使用给定的 study_id 和 study_date 将行插入到 study_event 表中。这是正确的吗?

我正在尝试创建将执行相同操作的 SQL Server 查询。从堆栈溢出,这是我发现的:

INSERT INTO study_event(study_id, study_date)
SELECT x.*
FROM (VALUES(@study_id, @study_date)) as x(study_id, study_date)
WHERE NOT EXISTS (SELECT 1 FROM studies s1 WHERE s1.study_id = x.study_id)

我想我理解这个查询,但我不确定SELECT x.* 是什么意思。这个查询会起作用吗? x.* 是什么意思?

【问题讨论】:

  • SQL Server 也支持MERGE。虽然在这种情况下有一个 MERGE 没有一个 WHEN MATCHED 似乎有点奇怪。

标签: sql-server sql-update sql-insert database-migration sql-merge


【解决方案1】:

x 指的是values() 子查询创建的别名,这里:

FROM (VALUES(@study_id, @study_date)) as x(study_id, study_date)

这将创建一个包含一行和两列study_idstudy_date 的派生表。

所以基本上x.* 为您提供了来自x 的整行,其中包含查询的两个原始参数@study_id@study_date

免责声明:I answered the original question!

【讨论】:

  • 谢谢!我当时不明白,但我不想一直打扰你:) 我很感激。现在我明白了!
猜你喜欢
  • 2015-11-29
  • 2016-07-29
  • 2020-03-06
  • 1970-01-01
  • 2019-03-01
  • 1970-01-01
  • 2020-07-20
  • 1970-01-01
  • 2020-01-19
相关资源
最近更新 更多