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();
                }
原文地址:https://www.cnblogs.com/jingjing-blogs/p/6511056.html