一些SqlBuckCopy心得

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

DataTable dt =new DataTable();
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 null
drop 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 =new SqlBulkCopy (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
FOR
      select 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

 

posted @ 2013-03-19 11:09  gavin.huang  阅读(1663)  评论(0编辑  收藏  举报