如何执行 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。
我想像这样执行 (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。