C#,使用merge来更新多个列

时间:2016-06-10 19:33:25

标签: c# sql-server csv

我编写了一个代码,该代码将读取CSV文件并解析数据,然后将数据添加到Microsoft SQL服务器中。我遇到的问题是在正确的列中添加正确的数字。以下是我的示例数据:(是的,我知道这不是CSV,我把它放到Excel中并复制粘贴以便于阅读)

department  emplnum lastname    firstname   sum_reg  sum_ot      procdate
114            1       a           a         25320       0      3674419200
114            1       a           a           0         0      3674505600
114            2       b           b         9960        0      3673900800
114            2       b           b         10440       0      3674160000
114            2       b           b         14760       0      3674246400
114            2       b           b           0         0      3674505600

这只是一个示例,还有很多值。如您所见,同一员工有多行。我希望我的SQl表具有列部门,emplnum,lastname,firstname,然后是sum_reg,sum_ot和sum_procdate的7个不同的列(即sum_reg1,sum_reg2,sum_reg3 ....以及其他两列的相同格式)。如果您在我发布的表格中注意到,则一个人有多个sum_reg,sum_ot和procdate值。我想要的是将这三列的第一个值放在sum_reg1,sum_ot1和procdate1中然后是下一行是同一个人,但是一个不同的procdate,它会将下一行数据放入sum_reg2,sum_ot2和procdate2。然后,当它到达一个新人时,它也将为他们做到这一点。

这是我到目前为止编写的代码(它不是完整的代码,只是与我想要完成的代码相关的代码):

SqlCommand cmd;
SqlConnection conn;
conn = new SqlConnection("Data Source=hureports01;Initial Catalog=hureports;Integrated Security=True");
conn.Open();
var sqlCommand = string.Format(@"MERGE [TABLE] AS target USING (select @department as department, @employee_ID as employee_ID, @last_name as last_name, @first_name as first_name, @Day as {0}, @regular_hours as {0}, @ot1_hours as {0}) 
AS source ON (target.employee_ID = source.employee_ID) WHEN MATCHED THEN UPDATE SET {0}= source.{0} WHEN NOT MATCHED THEN INSERT (department, employee_ID, last_name, first_name, {0}) VALUES (source.department, source.employee_ID, source.last_name, source.first_name, source.{0});");
cmd = new SqlCommand(sqlCommand, conn);
cmd.Parameters.AddWithValue("@department", record.department);
cmd.Parameters.AddWithValue("@employee_ID", record.emplnum);
cmd.Parameters.AddWithValue("@last_name", record.lastname);
cmd.Parameters.AddWithValue("@first_name", record.firstname);
cmd.Parameters.AddWithValue("@Day", record.procdate);
cmd.Parameters.AddWithValue("@regular_hours", record.sum_reg_a);
cmd.Parameters.AddWithValue("@ot1_hours", record.sum_ot1_a);
cmd.ExecuteNonQuery();
conn.Close();

我是一个非常懂的编码员,这是我第一次使用c#和Microsoft SQL服务器。我到目前为止所有的东西都上网了。我的Merge语句有问题,尤其是当它不匹配时结束。我也在努力研究如何保持相同的行,但每个不同的sum_reg,sum_ot和procdate都有不同的列。

0 个答案:

没有答案