mssql2008 自定義表類型實(shí)現(xiàn)(批量插入或者修改)
更新時間:2013年01月24日 16:12:48 作者:
在做大型網(wǎng)站或者系統(tǒng)的時候,經(jīng)常會遇到個問題就是批量插入或者修改數(shù)據(jù)庫;今天這邊不講SqlBulkCopy,只簡單講sql自定義表類型,感興趣的朋友可以了解下哦,希望本文對你有所幫助
在做大型網(wǎng)站或者系統(tǒng)的時候,經(jīng)常會遇到個問題就是批量插入或者修改數(shù)據(jù)庫。如果遇到這個問題,還是一條條記錄來處理,這樣的效率太低了,所以要考慮批量插入或者修改
今天這邊不講SqlBulkCopy,只簡單講sql自定義表類型。因?yàn)槟壳暗捻?xiàng)目我用到了分表的方式,用存儲過程比較方便自動創(chuàng)建分表?,F(xiàn)在把我目前寫的功能簡單做個記錄,也方便以后自己查閱
第一步,在數(shù)據(jù)庫里點(diǎn)擊 新建查詢 創(chuàng)建相應(yīng)的sql
--======自定義表類型Demo======
--創(chuàng)建表
create table tab
(
tabvalue varchar(10)
)
go
--創(chuàng)建自定義表類型
create type Type_tab as table
(
Type_tabvalue varchar(10)
)
go
--創(chuàng)建 存儲過程
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 調(diào)用 存儲過程
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表對應(yīng)的實(shí)體類。list 是ModelEnt 的一個集合,這樣可以實(shí)現(xiàn)多個row,這樣就能一次插入多條記錄。
今天這邊不講SqlBulkCopy,只簡單講sql自定義表類型。因?yàn)槟壳暗捻?xiàng)目我用到了分表的方式,用存儲過程比較方便自動創(chuàng)建分表?,F(xiàn)在把我目前寫的功能簡單做個記錄,也方便以后自己查閱
第一步,在數(shù)據(jù)庫里點(diǎn)擊 新建查詢 創(chuàng)建相應(yīng)的sql
復(fù)制代碼 代碼如下:
--======自定義表類型Demo======
--創(chuàng)建表
create table tab
(
tabvalue varchar(10)
)
go
--創(chuàng)建自定義表類型
create type Type_tab as table
(
Type_tabvalue varchar(10)
)
go
--創(chuàng)建 存儲過程
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 調(diào)用 存儲過程
復(fù)制代碼 代碼如下:
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表對應(yīng)的實(shí)體類。list 是ModelEnt 的一個集合,這樣可以實(shí)現(xiàn)多個row,這樣就能一次插入多條記錄。
您可能感興趣的文章:
- 卸載SQL2008遇到問題(重啟計(jì)算機(jī)失敗、找不到SQL卸載程序)的解決辦法
- sql2008安裝教程 SQL Server 2008 R2 安裝圖解
- SQL2005、SQL2008允許遠(yuǎn)程連接的配置說明(附配置圖)
- sql2008 hql語句翻譯過來的分頁語句介紹
- SQLServer日志清空語句(sql2000,sql2005,sql2008)
- SQL2008 附加數(shù)據(jù)庫提示 5120錯誤 解決辦法
- 使用Sqlserver事務(wù)發(fā)布實(shí)現(xiàn)數(shù)據(jù)同步(sql2008)
- sql2008評估期已過的解決辦法及序列號
- sql2008安裝后服務(wù)器改名造成名稱不一致解決方法
- SQL2008 附加數(shù)據(jù)庫提示5120錯誤解決方法
- SQL2008 詳解直接將XML存入到SQL中
相關(guān)文章
mysql?DISTINCT選取多個字段,獲取distinct后的行信息方式
這篇文章主要介紹了mysql?DISTINCT選取多個字段,獲取distinct后的行信息方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01mysql workbench 設(shè)置外鍵的方法實(shí)現(xiàn)
在MySQL Workbench中設(shè)置外鍵屬性是非常方便的,本文就來介紹一下mysql workbench 設(shè)置外鍵的方法實(shí)現(xiàn),具有一定能的參考價(jià)值,感興趣的可以了解一下2024-01-01Linux下MySQL 5.5/5.6的修改字符集編碼為UTF8的方法
下面小編就為大家?guī)硪黄狶inux下MySQL 5.5/5.6的修改字符集編碼為UTF8的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05在MySQL中同時查找兩張表中的數(shù)據(jù)的示例
這篇文章主要介紹了在MySQL中同時查找兩張表中的數(shù)據(jù)的示例,即一次查詢操作返回兩張表的結(jié)果,需要的朋友可以參考下2015-07-07詳解MySQL中的數(shù)據(jù)類型和schema優(yōu)化
這篇文章主要介紹了MySQL中的數(shù)據(jù)類型和schema優(yōu)化的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)MySQL的知識,感興趣的朋友可以了解下2020-10-10MySQL觸發(fā)器基本用法詳解【創(chuàng)建、查看、刪除等】
這篇文章主要介紹了MySQL觸發(fā)器基本用法,結(jié)合實(shí)例形式分析了mysql觸發(fā)器的基本創(chuàng)建、查看、刪除等相關(guān)使用方法與注意事項(xiàng),需要的朋友可以參考下2020-05-05