SqlServer使用表值参数批量插入更新数据


首先,创建自定义表类型:

CREATE TYPE BulkUdt AS TABLE(
Id int,
Name NVARCHAR(10)
)

然后是使用方式:

private static System.Data.DataTable GetTestTable()
{
    System.Data.DataTable dt = new System.Data.DataTable();
    dt.Columns.Add("Id");
    dt.Columns.Add("Name");
    for (int i = 0; i < 1000; i++)
    {
        var row = dt.NewRow();
        row["Id"] = i.ToString();
        row["Name"] = $"Name{i}";
        dt.Rows.Add(row);
    }
    return dt;
}

static void InsertTest()
{
    var dt = GetTestTable();
    SqlConnection sqlConn = new SqlConnection(
        ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString);
    const string TSqlStatement =
        "insert into BulkTestTable (Id,UserName)" +
        " SELECT nc.Id, nc.Name" +
        " FROM @Tvp AS nc";
    SqlCommand cmd = new SqlCommand(TSqlStatement, sqlConn);
    SqlParameter catParam = cmd.Parameters.AddWithValue("@Tvp", dt);
    catParam.SqlDbType = SqlDbType.Structured;
    catParam.TypeName = "dbo.BulkUdt";
    try
    {
        sqlConn.Open();
        if (dt != null && dt.Rows.Count != 0)
        {
            cmd.ExecuteNonQuery();
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
    finally
    {
        sqlConn.Close();
    }
}

批量插入是这样,更新也类似,这里就不再赘述了.