首先,创建自定义表类型:
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();
}
}
批量插入是这样,更新也类似,这里就不再赘述了.