mssql 2008 사용자 정의 테이블 형식 구현 (대량 삽입 또는 수정)

대형 사이트 나 시스템 을 만 들 때 자주 발생 하 는 문 제 는 데이터 베 이 스 를 대량으로 삽입 하거나 수정 하 는 것 이다.만약 이 문제 가 발생 한다 면, 여전히 하나하나 기록 하여 처리 해 야 한다. 이러한 효율 은 너무 낮 기 때문에, 대량으로 삽입 하거나 수정 하 는 것 을 고려 해 야 한다.
오늘 은 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 를 실현 할 수 있 고 한 번 에 여러 개의 기록 을 삽입 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기