c# - c#中的批量查询插入

标签 c# sql-server

我正在使用从源表到目标表的批量查询插入记录。源表有 10,000 条记录。假设源表有一个列 sid int, sname varchar(60) 和目标列有 sid int, sname varchar(30)

现在我无法成功插入所有记录,因为源 sname 和目标 sname 中存在长度问题。因为只有几行有问题。

现在我的问题是,有没有什么方法可以使用批量插入在目标表中插入记录,以便插入正确的记录而不插入不正确的记录。

我正在使用 C# 3.5

我正在使用的代码

using (SqlBulkCopy bulkCopy = new SqlBulkCopy(constring, SqlBulkCopyOptions.UseInternalTransaction))
        {
            try
            {
                //Edit mapping.
                bulkCopy.ColumnMappings.Add("AddressID", "AddressID");
                bulkCopy.ColumnMappings.Add("AddressLine1", "AddressLine1");
                bulkCopy.ColumnMappings.Add("City", "City");

                //specify destination table.
                bulkCopy.DestinationTableName = "[Address]";

                bulkCopy.BatchSize = 100;
                bulkCopy.NotifyAfter = 100;
               // bulkCopy.SqlRowsCopied += new SqlRowsCopiedEventHandler(bulkCopy_SqlRowsCopied);
                bulkCopy.WriteToServer(table);

            }
            catch (Exception ex)
            {
                richTextBox1.AppendText("\n\n" + ex.Message);
            }
        }

谢谢。

最佳答案

你在使用 BULK INSERT通过 SQL Server,或者您正在使用 System.Data.SqlClient.SqlBulkCopy类(class)?

如果您使用 BULK INSERT T-SQL,那么你可以设置MAXERRORS等于您期望的阈值(默认值为 10,这就是为什么您的 `BULK INSERT 可能会取消)。

BULK INSERT YourDb.YourSchema.YourTable
   FROM 'c:\YourFile.txt'
   WITH 
      (
         FIELDTERMINATOR =' |',
         ROWTERMINATOR =' |\n',
         MAXERRORS = 1000        -- or however many rows you think are exceeding the 30 char limit
      )

编辑

看到您正在使用 SqlBulkInsert 后类,我认为你最好的选择是修改 DataTable在调用 SqlBulkCopy.WriteToServer() 之前方法:

    foreach(DataRow row in table.Rows)
    {
        if (row["YourColumnThatExceeds30Chars"].ToString().Length > 30)
            row["YourColumnThatExceeds30Chars"] = 
                row["YourColumnThatExceeds30Chars"].ToString().Substring(0, 30);
    }

关于c# - c#中的批量查询插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8770825/

相关文章:

c# - 指南、查询字符串和身份验证

c# - C++/CLI 字符串互操作

c# - 从 ajax 调用填充多个下拉列表

SQL-仅在一列上选择不同的

sql - 在更新语法中对子查询使用内部联接

sql-server - 如果参数为空,如何返回所有记录

sql - 尝试根据另一个参数获取数据统计信息

c# - 下载动态生成的图像而不是在浏览器中显示

c# - Unity 中的 OAuth2 身份验证和操作

sql-server - SQL Server 和 Firebase/PouchDB 同步