需要将多个记录插入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
NOT EXISTS
(
SELECT
tbl.[Id]
FROM
[dbo].[FMdata] AS tbl
WHERE
tbl.Id = fm.Id
)
我无法确定第一次插入的原因是什么,而不是第二次。
尝试删除WHERE NOT EXISTS子句,它只在第一次插入时工作。后续插入不会向表中添加任何行。
答案 0 :(得分:1)
是否有错误,或者没有插入行?如果没有插入任何行,即使使用删除的where子句,听起来您可能在填充表值参数时遇到问题。您是否通过断点或SQL Server Profiler观察了要发送到SQL的内容?
您是否尝试过向fmData连接,而只插入fmData行为空的位置,而不是在哪里?
我同意Damien,这不是批量插入。
答案 1 :(得分:0)
对不起。我很抱歉。这是我的代码中的一个错误。 SPROC没有问题。我正在参数化函数并传递了错误的表值参数。