【发布时间】: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