表值参数不适用的批量插入

时间:2016-12-15 15:16:18

标签: sql sql-server database sql-server-2008 tsql

需要将多个记录插入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子句,它只在第一次插入时工作。后续插入不会向表中添加任何行。

2 个答案:

答案 0 :(得分:1)

是否有错误,或者没有插入行?如果没有插入任何行,即使使用删除的where子句,听起来您可能在填充表值参数时遇到问题。您是否通过断点或SQL Server Profiler观察了要发送到SQL的内容?

您是否尝试过向fmData连接,而只插入fmData行为空的位置,而不是在哪里?

我同意Damien,这不是批量插入。

答案 1 :(得分:0)

对不起。我很抱歉。这是我的代码中的一个错误。 SPROC没有问题。我正在参数化函数并传递了错误的表值参数。