如何执行INSERT..SELECT语句

时间:2016-05-16 08:21:44

标签: c# sql asp.net ado.net informix

我想像这样执行(INSERT .. SELECT)语句:

cmdTxt.Clear();
cmdTxt.Append(" INSERT INTO  aast:sc1pen ");
cmdTxt.Append(" SELECT action_month,action_year,200,emp_num,penalty_action , ");
cmdTxt.Append("  'APPLY ' || penalty_reason || ' day ' , 0 , 0 ");
cmdTxt.Append(" FROM sc2pen WHERE sal_year = ? and sal_month = ? and penalty_type = 1 and pay_type = 0 ");
myIfxCmd.CommandText = cmdTxt.ToString();

myIfxCmd.Parameters.Clear();

myIfxCmd.Parameters.Add("sal_year", IfxType.Integer);
myIfxCmd.Parameters.Add("sal_month", IfxType.Integer);

myIfxCmd.Parameters[0].Value = penaltyDt.Rows[0]["sal_year"];
myIfxCmd.Parameters[1].Value = penaltyDt.Rows[0]["sal_month"];

现在我很困惑,我应该使用

myIfxCmd.ExecuteNonQuery(); 

要执行这样的查询,尽管它包含读操作?

1 个答案:

答案 0 :(得分:1)

首先,进行内联SQL并不是一个好主意,因为这不会产生可维护的代码。这应该在理想情况下在存储过程内的数据库中完成 - 特别是用于将数据插入现有表中。然后,您可以执行SP并在输出参数内返回数据。

但是,如果你真的想沿着这条路走,那就执行

    ExecuteNonQuery()

...不会返回任何数据,只会记录受影响的记录。 如果要返回某些数据,例如新插入记录的ID,则需要使用

    ExecuteScalar()

...这将允许返回标量值。