• 使用表类型(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; }

    }

  • 相关阅读:
    Python自然语言处理学习笔记(6):1.4 回到Python:决策和控制
    Python自然语言处理学习笔记(11):2.3 代码重用
    Python文件夹与文件的操作
    Python自然语言处理学习笔记(10):2.2 条件频率分布
    [导入]SunriseUpload.0.9.1的源码分析(一)
    [导入]Processing A .aspx File From Console Window, Without Using IIS
    [导入]ASP.net(C#)学习要点交流。
    [导入]Access里使用存储过程及用户自己定义的控件里使用参数
    [导入]SunriseUpload.0.9.1的源码分析(五)
    [导入]上传文件时如何保存视图状态?
  • 原文地址:https://www.cnblogs.com/HF520134/p/9897871.html
Copyright © 2020-2023  润新知