如何执行 INSERT..SELECT 语句

How to execute INSERT..SELECT statement

我想像这样执行 (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(); 

执行这样的查询,虽然它包含读取操作?

首先,内联 SQL 不是一个好主意,因为这不利于维护代码。理想情况下,这应该在存储过程内的数据库中完成——尤其是将数据插入现有 table。然后你可以在输出参数中执行 SP 和 return 数据。

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

    ExecuteNonQuery()

...不会 return 任何数据,只有受影响的记录。 如果你想return一些数据,比如新插入记录的id,你想使用

    ExecuteScalar()

...这将允许对标量值进行 returned。