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,這樣就能一次插入多條記錄。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM