如何将给定的 SQL 查询转换为 SQL 服务器查询?

How do I convert given SQL query to SQL Server query?

我有一个 SQL 查询需要理解并转换为 SQL 服务器查询。这是 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 table 没有给出 study_id,我正在插入行到 study_event table 给定 study_id 和 study_date. 这是正确的吗?

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

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.* 是什么意思?

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

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

这将创建一个派生的 table,其中包含一行和两列 study_idstudy_date

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

免责声明: