一些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