加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 14:29:45 所属栏目:MsSql教程 来源:网络整理
导读:SQLServer2008表值参数(Table-Valued Parameter)批量更新数据。表值参数是SQLServer2008才有的一个新特性,使用这个新特性,我们可以把一个表类型作为参数传递到函数或存储过程里。 1目标要更新的表 DestTableName; 2创建一个自定义类型表,表结构与目标
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 CreatePassport 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 CreatePassportWithTVP DataTable GetTableSchema()
{
DataTable dataTable
DataTable();
dataTable.Columns.AddRange(
DataColumn[] { DataColumn( PassportKey ) });

dataTable; } } }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读