当前位置: 移动技术网 > IT编程>数据库>Mysql > mssql2008 自定义表类型实现(批量插入或者修改)

mssql2008 自定义表类型实现(批量插入或者修改)

2017年12月12日  | 移动技术网IT编程  | 我要评论
在做大型网站或者系统的时候,经常会遇到个问题就是批量插入或者修改数据库。如果遇到这个问题,还是一条条记录来处理,这样的效率太低了,所以要考虑批量插入或者修改

今天这边不讲sqlbulkcopy,只简单讲sql自定义表类型。因为目前的项目我用到了分表的方式,用存储过程比较方便自动创建分表。现在把我目前写的功能简单做个记录,也方便以后自己查阅

第一步,在数据库里点击 新建查询 创建相应的sql
复制代码 代码如下:

--======自定义表类型demo======
--创建表
create table tab
(
tabvalue varchar(10)
)
go
--创建自定义表类型
create type type_tab as table
(
type_tabvalue varchar(10)
)
go
--创建 存储过程
create procedure p_tab
(
@ptab type_tab readonly
)
as
begin
insert into tab select * from @ptab
end
--sql 测试表类型 type1
declare @tt type_tab
insert into @tt values('a')
insert into @tt values('b')
insert into @tt values('c')
insert into tab select * from @tt
select * from tab
--sql 测试表类型 type2
declare @tt2 type_tab
insert into @tt2 values('a')
insert into @tt2 values('b')
insert into @tt2 values('c')
execute p_tab @tt2

第二步 asp.net 调用 存储过程
复制代码 代码如下:

using (sqlconnection conn =sqlhelper.settings.getsqlconnection(true))
{
try
{
datatable dtadd = new datatable();
dtadd.columns.add("tabvalue");
dtadd.columns["tabvalue"].datatype = system.type.gettype("system.string");
foreach (modelent rl in list)
{
datarow dr = dtadd.newrow();
dr["tabvalue"] = rl.tabvalue;
dtadd.rows.add(dr);
}
//int rt = sqlhelper.sqlhelper.sqlbulkcopy(dtadd, tablename, conn);
sqlcommand cmd = new sqlcommand("p_tab", conn);
cmd.commandtype = commandtype.storedprocedure;
cmd.parameters.add("@ptab", sqldbtype.structured).value =dtadd;
if (conn.state == connectionstate.closed)
{
conn.open();
}
return cmd.executenonquery();
}
catch (exception ex)
{
#if debug
throw ex;
#else
return -10000;
#endif
}
finally
{
conn.close();
}

modelent 是tab表对应的实体类。list 是modelent 的一个集合,这样可以实现多个row,这样就能一次插入多条记录。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网