mssql2008 自定义表类型

在做大型网站或者系统的时候,经常会遇到个问题就是批量插入或者修改数据库。如果遇到这个问题,还是一条条记录来处理,这样的效率太低了,所以要考虑批量插入或者修改

今天这边不讲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,这样就能一次插入多条记录。

转载于:https://www.cnblogs.com/_fyz/archive/2013/01/24/slqtable.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值