【问题标题】:Insert data into specific columns in SQL Server from C# Datatable从 C# Datatable 将数据插入 SQL Server 中的特定列
【发布时间】:2017-03-14 07:01:57
【问题描述】:

假设我的 SQL Server 表看起来像

Col1 | Col2 | Col3 | Col4 | Col5

我的数据表看起来像

Col X | Col Y | Col Z

如何将数据表中的值映射到 SQL Server 表中的特定列?

数据表包含大量行,所以我想避免使用逐行插入。

最好的方法是什么?

【问题讨论】:

  • “避免使用逐行插入”是什么意思?
  • 使用带有表值参数的存储过程。
  • @LeiYang 在这种情况下,我可以循环插入命令,将行一一插入到sql表中。我不想使用这种方法,因为我的数据表包含超过 1000 行。
  • 1000 行是个大数字吗?

标签: c# sql-server datatable ado.net


【解决方案1】:

使用带有表值参数的存储过程。
创建与您的 c# 数据表具有相同结构的用户定义表类型。 请注意,该类型的列必须与 c# 数据表的列完全匹配,包括列的顺序。

CREATE TYPE dbo.MyTableType AS TABLE
(
    ColX int, -- Must be the same data type of ColX in your c# data table
    ColY nvarchar(200), -- Must be the same data type of ColY in your c# data table
    ColZ float -- Must be the same data type of ColZ in your c# data table
)

然后您可以创建存储过程,您将在其中实际执行列映射:

CREATE PROCEDURE InsertIntoMyTable
(
    @TableToInsert dbo.MyTableType READONLY -- Table valued parameters must be readonly!
)
AS
    INSERT INTO MyTable (Col1, Col2, Col3)
    SELECT ColZ, ColX, ColY
    FROM @TableToInsert
GO

【讨论】:

    【解决方案2】:

    这可能对你有帮助

    SqlBulkCopy.WriteToServer 方法(数据表)

    将提供的 DataTable 中的所有行复制到由 SqlBulkCopy 的 DestinationTableName 属性指定的目标表 对象。

    https://msdn.microsoft.com/en-us/library/ex21zs8x(v=vs.110).aspx

    【讨论】:

    • 这可以通过指定从Datatable到SQL Table的ColumnMappings来使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多