如果存在数据库中要更新的数据 - 否则它应该在 SQL 服务器中插入新记录
Data to be updated in database if it exists - else it should insert new records in SQL Server
如果数据不存在,我已经创建了一个插入语句来将数据添加到数据库中。
INSERT INTO SampleList(SampleId, Type, Description)
SELECT nr.SampleId, nr.Type, nr.Description
FROM (VALUES (1,'A','AA'),
(2,'B','BB'),
(3,'C','CC'),
(4,'D','DD')
) AS nr (SampleId,Type,Description)
LEFT JOIN SampleList cr ON cr.SampleId = nr.SampleId
WHERE cr.SampleId IS NULL
但如果数据库中存在数据,我也想更新行。
你能帮我做一下吗?
您可以使用 MERGE
:
MERGE SampleList cr
USING (SELECT nr.SampleId, nr.[Type], nr.[Description]
FROM (VALUES (1,'A','AA'), (2,'B','BB'), (3,'C','CC'), (4,'D','DD')
) as nr (SampleId, [Type], [Description])
) AS nr -- Use missed alias
ON (cr.SampleId = a.SampleId)
WHEN MATCHED THEN
UPDATE SET cr.[Type] = nr.[Type], cr.[Description] = nr.[Description]
WHEN NOT MATCHED BY TARGET THEN
INSERT (SampleId, [Type], [Description])
VALUES (nr.SampleId, nr.[Type], nr.[Description]); -- to terminate the merge
但是,您可以仅使用 values
来简化子查询:
MERGE SampleList cr
USING ( VALUES (1,'A','AA'), (2,'B','BB'), (3,'C','CC'), (4,'D','DD')
) AS nr(SampleId, [Type], [Description])
ON (cr.SampleId = a.SampleId)
WHEN MATCHED THEN
UPDATE SET cr.[Type] = nr.[Type], cr.[Description] = nr.[Description]
WHEN NOT MATCHED BY TARGET THEN
INSERT (SampleId, [Type], [Description])
VALUES (nr.SampleId, nr.[Type], nr.[Description]); -- to terminate the merge
如果数据不存在,我已经创建了一个插入语句来将数据添加到数据库中。
INSERT INTO SampleList(SampleId, Type, Description)
SELECT nr.SampleId, nr.Type, nr.Description
FROM (VALUES (1,'A','AA'),
(2,'B','BB'),
(3,'C','CC'),
(4,'D','DD')
) AS nr (SampleId,Type,Description)
LEFT JOIN SampleList cr ON cr.SampleId = nr.SampleId
WHERE cr.SampleId IS NULL
但如果数据库中存在数据,我也想更新行。
你能帮我做一下吗?
您可以使用 MERGE
:
MERGE SampleList cr
USING (SELECT nr.SampleId, nr.[Type], nr.[Description]
FROM (VALUES (1,'A','AA'), (2,'B','BB'), (3,'C','CC'), (4,'D','DD')
) as nr (SampleId, [Type], [Description])
) AS nr -- Use missed alias
ON (cr.SampleId = a.SampleId)
WHEN MATCHED THEN
UPDATE SET cr.[Type] = nr.[Type], cr.[Description] = nr.[Description]
WHEN NOT MATCHED BY TARGET THEN
INSERT (SampleId, [Type], [Description])
VALUES (nr.SampleId, nr.[Type], nr.[Description]); -- to terminate the merge
但是,您可以仅使用 values
来简化子查询:
MERGE SampleList cr
USING ( VALUES (1,'A','AA'), (2,'B','BB'), (3,'C','CC'), (4,'D','DD')
) AS nr(SampleId, [Type], [Description])
ON (cr.SampleId = a.SampleId)
WHEN MATCHED THEN
UPDATE SET cr.[Type] = nr.[Type], cr.[Description] = nr.[Description]
WHEN NOT MATCHED BY TARGET THEN
INSERT (SampleId, [Type], [Description])
VALUES (nr.SampleId, nr.[Type], nr.[Description]); -- to terminate the merge