SqlBulkCopy与Insert触发器

h576514515 2013-09-02 04:10:41
我原先用sql语句执行插入语句,数据量一大就很慢比如上万条。后来我用SqlBulkCopy插入到SQLSEVER数据中
using (System.Data.SqlClient.SqlBulkCopy sqlBC = new System.Data.SqlClient.SqlBulkCopy(strcon,SqlBulkCopyOptions.FireTriggers))
{
sqlBC.BatchSize = 100000;
sqlBC.BulkCopyTimeout = 120;
sqlBC.DestinationTableName = "dbo.DX_Customer";
sqlBC.ColumnMappings.Add("姓名", "CustomerName");
sqlBC.ColumnMappings.Add("性别", "Sex");
sqlBC.ColumnMappings.Add("地址", "Address");
sqlBC.ColumnMappings.Add("单位", "Company");
sqlBC.ColumnMappings.Add("手机", "Mobile");
sqlBC.ColumnMappings.Add("电话", "Telephone");
sqlBC.ColumnMappings.Add("邮箱", "Email");
sqlBC.WriteToServer(dtExcelImport);
}

在dbo.DX_Customer这个表中有个客户编号这一列,这列是执行只定义函数自动生成的,但是SqlBulkCopy无法执行自定义函数。后来发现使用SqlBulkcopy时在insert触发器的inserted表中是有多条记录的,且一次调用SqlBulkcopy只会有一次触发器的运行。我在触发器给中用游标循环inserted表可是这样数据量一大也会慢
createtrigger [dbo].[CustomerNumber]
on [dbo].[DX_Customer]
After insert
as
declare @ID int

--定义游标获取符和条件的客户
declare cursor_title cursor for
select ID from inserted

--打开游标
open cursor_title

--提取游标第一行
fetch next from cursor_title into @ID

--循环提取游标内容
while @@FETCH_STATUS=0
begin
declare @Code varchar(10)
declare @Date varchar(4)
set @Date= SUBSTRING(CONVERT(varchar(100), GETDATE(), 12),1,4)
select @Code=MAX(CustomerNumber) from DX_Customer where CustomerNumber like ''+@Date+'%' and CustomerNumber is not null
if @Code>0
begin
set @Code=@Code+1
end
else
begin
set @Code=@Date+'00001'
end
update DX_Customer set CustomerNumber=@Code where DX_Customer.ID=@ID
--获取游标下一行
fetch next from cursor_title into @ID
end

--关闭游标
close cursor_title
--释放游标资源
deallocate cursor_title

各位有什么好的办法,数据量是1万条以上的
...全文
467 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
OriginalCobra 2014-09-29
  • 打赏
  • 举报
回复
我也非常希望知道这个问题的解决办法!!!
wenchund 2014-01-26
  • 打赏
  • 举报
回复
触发器中,不要使用游标 使用 insert into table1 (column1,column2....) select column1,column2,.... from inserted
手抓宝 2013-09-03
  • 打赏
  • 举报
回复

62,239

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧