【发布时间】:2017-04-24 20:52:49
【问题描述】:
需要在一个 SQL 表中插入多条记录。如果有重复(已经插入的记录),那么我想忽略它们。
为了将多条记录从我的代码发送到 SQL,我使用的是表值参数。
我在考虑两个选项。
选项 1:对 SQL 表进行 get 调用并检查是否存在重复并返回重复的行键。仅对 SQL 表中不存在的行键执行带表值参数的多次插入。
选项 2:使用表值参数并调用批量插入。在 SQL 中进行重复检测并忽略重复行。
实现的SQL如下:
@tvpNewFMdata 是表值参数。
INSERT INTO
[dbo].[FMData]
(
[Id],
[Name],
[Path],
[CreatedDate],
[ModifiedDate]
)
SELECT
fm.Id, fm.Name, fm.Path, GETUTCDATE(), GETUTCDATE()
FROM
@tvpNewFMdata AS fm
WHERE
fm.Id NOT IN
(
SELECT
[Id]
FROM
[dbo].[FMdata]
)
在 SQL 方法中,我先进行选择以检查该行是否存在,仅当不存在时才进行插入。
想要更好地了解哪种方法在性能方面进行了优化。也想了解一下上面的查询是否优化了。
【问题讨论】:
-
你看过Merge吗?
标签: sql sql-server database sql-server-2008 tsql