sql server inser相关处理(添加一条,一次添加多条,Bulk插入多条)
1,insert语句
insert into 表一(字段一,字段二,字段三) value(值一,值二,值三)
2,sql 插入多条语句,其中完整值之间用逗号分割
insert into 表一(字段一,字段二,字段三) values(值一,值二,值三),(值一,值二,值三)
3,inser into...select...即从不同的表中直接添加到表中,其中要求字段名称与数据类型保持一致
insert into 表二(字段一,字段二,字段三)
select 字段一,字段二,字段三
from 表一
在程序中如果有简单的insert语句插入100条数据,循环使用Insert不仅效率低,而且会导致SQL一系统性能问题。可以使用Bulk和表值参数
可以使用Stopwatch类检测程序运行时间,优化程序
Stopwatch sw = new Stopwatch(); //获取程序运行时间 sw.Start(); sw.Stop(); sw.ElapsedMilliseconds 可获取到程序运行时间
4,Bulk的使用,bulk方法主要思想是通过在客户端把数据都缓存在Table中,然后利用SqlBulkCopy一次性把Table中的数据插入到数据库
SqlConnection sqlConn = new SqlConnection(
ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString);
SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConn);
bulkCopy.DestinationTableName = "BatchInsertIntoTable"; //目标表
bulkCopy.BatchSize = dt.Rows.Count;
try
{
sqlConn.Open();
if (dt != null && dt.Rows.Count != 0)
bulkCopy.WriteToServer(dt);
}
catch (Exception ex)
{
throw ex;
}
finally
{
sqlConn.Close();
if (bulkCopy != null)
bulkCopy.Close();
}
5,表值参数,表值参数是SQL Server 2008新特性,简称TVPs。对于表值参数不熟悉的朋友,可以参考最新的book online
SqlConnection sqlConn = new SqlConnection(
ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString);
const string TSqlStatement =
"insert into BatchInsertIntoTable (Id,UserName,Pwd)" +
" SELECT nc.Id, nc.UserName,nc.Pwd" +
" FROM @NewBulkTestTvp AS nc";
SqlCommand cmd = new SqlCommand(TSqlStatement, sqlConn);
SqlParameter catParam = cmd.Parameters.AddWithValue("@NewBulkTestTvp", dt);
catParam.SqlDbType = SqlDbType.Structured;
catParam.TypeName = "dbo.ReadData";
try
{
sqlConn.Open();
if (dt != null && dt.Rows.Count != 0)
{
cmd.ExecuteNonQuery();
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
sqlConn.Close();
}

浙公网安备 33010602011771号