zoukankan      html  css  js  c++  java
  • 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,这样就能一次插入多条记录。
  • 相关阅读:
    JAVA中SESSION和COOKIE的解释
    关于org.apache.catalina.session.StandardManager doLoad错误的解决
    MySQL 修改字段类型或长度
    JS倒计时 定时器
    设置tomcat内存
    Unable to resolve JRE: jdk1.6.0_01 (Standard VM)
    Error configuring application listener of class org.springframework.web.context.ContextLoader
    nested exception is java.lang.OutOfMemoryError: PermGen space
    导数据,整理数据思路总结
    mysql_mssql_access_2017年最新手机号段归属地数据库(17年4月更新)360569记录
  • 原文地址:https://www.cnblogs.com/_fyz/p/slqtable.html
Copyright © 2011-2022 走看看