微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQLSERVER2008表值参数批量更新效率高

sqlServer2008表值参数(Table-Valued Parameter)批量更新数据。表值参数是sqlServer2008才有的一个新特性,使用这个新特性,我们可以把一个表类型作为参数传递到函数或存储过程里。
1目标要更新的表 DestTableName;
2创建一个自定义类型表,表结构与目标表结构一样 typeTableName;
3创建一个存储过程
A)声明一个自定义类型表参数 @typeTableName typeTableName readonly;
 B)insert into DestTableName(Field1,Field2,...) select Field1,.. from @typeTableName
示例程序实现:
using System;
System.Diagnostics;
System.Data;
System.Data.sqlClient;
com.DataAccess;

namespace ConsoleAppInsertTest
{
class Program
{
static string connectionString = sqlHelper.ConnectionStringLocalTransaction; // 数据库连接字符串
int count 1000000 ; 插入的条数 void Main( [] args)
{
long commonInsertRunTime = CommonInsert();
Console.WriteLine(string.Format("普通方式插入{1}条数据所用的时间是{0}毫秒",commonInsertRunTime,count)); long sqlBulkcopyInsertRunTime sqlBulkcopyInsert();
Console.WriteLine(
.Format( " 使用sqlBulkcopy插入{1}条数据所用的时间是{0}毫秒 " ,sqlBulkcopyInsertRunTime,count));

TVPInsertRunTime TVPInsert();
Console.WriteLine(
使用表值方式(TVP)插入{1}条数据所用的时间是{0}毫秒 /// <summary>
普通调用存储过程插入数据
</summary> <returns></returns>
private CommonInsert()
{
Stopwatch stopwatch
new Stopwatch();
stopwatch.Start();

passportKey;
for ( i 0 ; i < count; i ++ )
{
passportKey
Guid.NewGuid().ToString();
sqlParameter[] sqlParameter
{ sqlParameter( @passport ssportKey) };
sqlHelper.ExecuteNonQuery(connectionString,CommandType.StoredProcedure,
CreatePassport sqlParameter);
}
stopwatch.Stop();
return stopwatch.ElapsedMilliseconds;
}

使用sqlBulkcopy方式插入数据
<param name="dataTable"></param> sqlBulkcopyInsert()
{
Stopwatch stopwatch
Stopwatch();
stopwatch.Start();

DataTable dataTable
GetTableSchema();
Guid.NewGuid().ToString();
DaTarow daTarow
dataTable.NewRow();
daTarow[
] passportKey;
dataTable.Rows.Add(daTarow);
}

sqlBulkcopy sqlBulkcopy
sqlBulkcopy(connectionString);
sqlBulkcopy.DestinationTableName
Passport ;
sqlBulkcopy.BatchSize
dataTable.Rows.Count;
sqlConnection sqlConnection
sqlConnection(connectionString);
sqlConnection.open();
if (dataTable != null && dataTable.Rows.Count != )
{
sqlBulkcopy.WritetoServer(dataTable);
}
sqlBulkcopy.Close();
sqlConnection.Close();

stopwatch.Stop();
stopwatch.ElapsedMilliseconds;
}

TVPInsert()
{
Stopwatch stopwatch
passportKey;
dataTable.Rows.Add(daTarow);
}

sqlParameter[] sqlParameter
@TVP sqlHelper.ExecuteNonQuery(connectionString,0)">CreatePassportWithTVP sqlParameter);

stopwatch.Stop();
DataTable GetTableSchema()
{
DataTable dataTable
DataTable();
dataTable.Columns.AddRange(
DataColumn[] { DataColumn( PassportKey ) });

dataTable; } } }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐