zoukankan      html  css  js  c++  java
  • 使用表类型(Table Type-SqlServer)实现百万级别的数据一次性毫秒级别插入

    使用表类型(Table Type)实现百万级别的数据一次性插入

    思路 

             1 创建表类型(TaBleType)
             2 创建添加存储过程
             3 使用C#语言构建一个DataTable
             4 将整个Table作为参数插入


    步骤1 创建表类型(TaBleType)

    CREATE TYPE [dbo].[TestTableType] AS TABLE(
    [SeriesNumber] [nvarchar](80) NOT NULL,
    [CustomerName] [nvarchar](80) NOT NULL,
    )

    步骤2  创建添加存储过程

    CREATE procedure [dbo].[usp_Add_RepeatDataAnalysis]
    (
    @TestTableType TestTableType READONLY
    )
    AS
    BEGIN
    SET NOCOUNT ON
    BEGIN TRANSACTION
    INSERT INTO MES_SNOriginal
    (
    SeriesNumber,
    CustomerName
    )
    SELECT
    SeriesNumber
    ,CustomerName
    FROM @TestTableType
    COMMIT TRANSACTION
    END

    步骤3  使用C#语言构建一个DataTable

    public static void TestTableType()
    {

    DataTable dataTable = new DataTable();

    dataTable.Columns.Add("SeriesNumber", typeof(string));

    dataTable.Columns.Add("CustomerName", typeof(string));

    DataRow dataRow = dataTable.NewRow();

    dataRow["SeriesNumber"] = "SeriesNumber";

    dataRow["CustomerName"] = "SeriesNumber";

    AddTestTableType(dataTable);

    }

     

    步骤4  将整个Table作为参数插入

    public static void AddTestTableType(DataTable dt)
    {

    SqlParameter[] parameters = new SqlParameter[1];

    parameters[0] = new SqlParameter() { ParameterName = "TestTableType", Value = dt };//值为上面转换的datatable

    ExecuteStoredProcedure("usp_Add_RepeatDataAnalysis", parameters);

    }

    public static void ExecuteStoredProcedure(string spName, SqlParameter[] parameterValues)
    {

    //自己配置数据库连接

    string connectionString = "";

    List<TestTableTypeDTO> resultList = new List<TestTableTypeDTO>();

    using (SqlConnection conn = new SqlConnection(connectionString))

    {

    conn.Open();

    SqlCommand cmd = new SqlCommand(spName, conn);

    cmd.CommandType = CommandType.StoredProcedure;

    cmd.CommandTimeout = 0;

    foreach (SqlParameter p in parameterValues)

    {

    if ((p.Direction == ParameterDirection.InputOutput) && (p.Value == null))

    {

    p.Value = DBNull.Value;

    }

    cmd.Parameters.Add(p);

    }

    cmd.ExecuteNonQuery();

    }

    }

    }

    public class TestTableTypeDTO
    {

    public int MES_SNOriginal_UID { get; set; }

    public string SeriesNumber { get; set; }

    }

  • 相关阅读:
    日期 根据所选日期 获取 之后N天的日期
    错误退出登录
    挂载路由导航守卫 router
    缓存 ssessionStorage&localStorage
    vue项目 第三方图标库阿里图库
    码云新建仓库 以及本地上传
    sql的四种连接-左外连接、右外连接、内连接、全连接
    C#中常用修饰符
    接口的隐式和显式实现
    C#break、continue、return、goto
  • 原文地址:https://www.cnblogs.com/HF520134/p/9897871.html
Copyright © 2011-2022 走看看