Sql server 如何将给定的SQL查询转换为SQL Server查询?

Sql server 如何将给定的SQL查询转换为SQL Server查询?,sql-server,sql-update,sql-insert,database-migration,sql-merge,Sql Server,Sql Update,Sql Insert,Database Migration,Sql Merge,我有一个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) 从我的理解来看,这意味着如果研究事件表没有给定研究id,我将插入行到具有

我有一个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)
从我的理解来看,这意味着如果研究事件表没有给定研究id,我将插入行到具有给定研究id和研究日期的研究事件表中。这是否正确

我正在尝试创建将执行相同操作的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*表示什么?

x
指的是
values()
子查询创建的别名,如下所示:

FROM (VALUES(@study_id, @study_date)) as x(study_id, study_date)
这将创建一个包含一行两列的派生表
study\u id
study\u date

因此基本上,
x.*
给出了
x
中的整行,其中包含查询的两个原始参数,
@study\u id
@study\u date


免责声明:

x
指的是
values()
子查询创建的别名,如下所示:

FROM (VALUES(@study_id, @study_date)) as x(study_id, study_date)
这将创建一个包含一行两列的派生表
study\u id
study\u date

因此基本上,
x.*
给出了
x
中的整行,其中包含查询的两个原始参数,
@study\u id
@study\u date


免责声明:

SQL Server也支持
MERGE
。虽然在匹配时有一个
MERGE
而没有一个
在这种情况下似乎有点奇怪。SQL Server也支持
MERGE
。虽然在匹配时有一个
合并
而没有一个
在这种情况下似乎有点奇怪。谢谢!我当时不明白,但我不想一直打扰你:)我很感激。现在我明白了!谢谢我当时不明白,但我不想一直打扰你:)我很感激。现在我明白了!