mysql sqlbuckcopy_一些SqlBuckCopy心得

一些SqlBuckCopy心得,项目很多地方需要用到批量insert,这个时候如果一条条插入,很影响性能,整张表格被锁在那,而SqlBuckCopy则解决了这个问题。

1:首先,在代码中建一张中间DataTable

DataTable dt =newDataTable();

dt.Columns.Add(Column1,typeof(String));

dt.Columns.Add(Column2,typeof(String));

dt.Columns.Add(Column2,typeof(String));

2:然后将需要批量插入的数据先放入DataTable中。

3:写sql语句了,先判断变量表是否存在

IF OBJECT_ID(N'#tempTable') is not nulldrop table #tempTable

create table #tempTable

([Column1] [varchar] (4) not null,

[Column2] [varchar] (4) not null,

[Column3] [varchar] (4) not null,)

4:执行ExecuteNonQuery

5:使用SqlBulkCopy

SqlBulkCopy sbc =newSqlBulkCopy (db.conn);

sbc.DestinationTableName="#tempTable";

sbc.WriteToServer(dt);

6:写insert语句将临时表中数据存入目标表中

insert into 目标表 (Column1,Column2,Column3)

select Column1,Column2,Column3 from #tempTable

7:关闭连接

附上一些sql脚本心得:创建cursor,移动cursor,到销毁cursor,sql的cursor使用

using数据库名

declare @tb table(orgid varchar(4))

insert into @tb (orgid)select distinct orgid from表名

declare orgids_cursor CURSOR

FORselect orgid from@tb

OPEN orgids_cursor

DECLARE @orgid varchar(4)

FETCH NEXT FROM orgids_cursor into @orgid

WHILE (@@FETCH_STATUS<>-1)

BEGIN

IF(@@FETCH_STATUS<>-2)

BEGIN

END

FETCH NEXT FROM orgids_cursor INTO @orgid

END

CLOSE orgids_cursor

DEALLOCATE orgids_cursor

分页查询

select row_number() over(order by column1,column2) as 'RowNum',column1,column2,case when year(column1)='9999' then null

when datediff(DD,Getdate(),column1)<0 then null

else datediff(DD,Getdate(),column1) end as 'RemainderDays'

from TableName

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值