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(); }