목록의 값을 데이터 테이블로 전달한 다음 저장 프로 시저에 테이블 변수로 전달합니다. 어떤 이유로 인해 값이 Table 변수에서 올바르게 전달되지 않습니다. 나는 SQL 프로파일 러를 실행하고 모든 값이 데이터 테이블을 만들기 불필요한 오버 헤드가 NULL테이블 변수로 datatable을 저장 프로 시저에 전달할 수 없습니다.
DataTable dbRk1 = new DataTable("dbRk1");
dbRk1.Columns.Add("val1", typeof(String));
dbRk1.Columns.Add("val2", typeof(DateTime));
dbRk1.Columns.Add("val2", typeof(Int64));
dbRk1.Columns.Add("val3", typeof(Int32));
dbRk1.Columns.Add("val4", typeof(Int64));
dbRk1.Columns.Add("val5", typeof(Int32));
dbRk1.Columns.Add("val5", typeof(DateTime));
drk.x.ForEach(x => dbRk1.Rows.Add(x));
DataTable table = new DataTable();
SqlConnection conn = null;
using (conn =new connection...)
{
SqlCommand cmd = new SqlCommand("[proc]", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@TableVariable", dbRk1);
cmd.ExecuteNonQuery();
}
Alter PROCEDURE [dbo].[proc]
(
@TableVar [dbo].[TableVar] READONLY
)
AS
BEGIN
Set nocount on
Declare @MYID INT
Declare @SOMEDate DateTime
Declare @NEWDate Date
select @MYID = some_id,
@SOMEDate = convert(date, db_some_date) from tbl_some
where someval = (select tb.val1 from @TableVar as tb);
Merge DeviceBillCycle as target
using (Select x.val1, x.val2, x.val3,x.val4,
x.val5,x.val6, x.val7 from @TableVar as x)
as Source
on val_id = @MYID
when matched and @MYID !=NULL then
update set val1= Source.[val1],
val2=Source.[val2],
val3=Source.[val3],
val4=Source.[val4],
val5=Source.[val5],
val6=Source.[val6]
when not matched and @MYID !=NULL then
insert
values (Source.[val1],
Source.[val2],
Source.[val3],
Source.[val4],
Source.[val5],
Source.[val6],
Source.[val7],
@MYID
) ;
end
drk.x.ForEach 후 (X => dbRk1.Rows.Add (X)); dbRk1의 몇 가지 값을 디버그하여 확인하십시오. 그리고 datatable을 사용하지 않는 곳에 답을 게시 할 것입니다. – Paparazzi
네 말이 맞아. 값은 drk.x.ForEach (x => dbRk1.Rows.Add (x)); 동안 진행되지 않습니다. – user1110790