2016-05-16 3 views
0

Я хочу, чтобы выполнить (INSERT .. SELECT) заявление так:Как выполнить 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(); 

Чтобы выполнить запрос как это, хотя это включает операцию чтения?

+0

Вы проверили его? – Gnqz

+0

Да, используйте myIfxCmd.ExecuteNonQuery(); потому что вы не возвращаете результат клиенту. Выбор используется только для источника данных для заполнения вставки. –

ответ

1

Во-первых, не стоит делать встроенный SQL, поскольку это не делает для поддерживаемого кода. Это должно быть сделано в базе данных внутри хранимой процедуры в идеале - особенно для вставки данных в существующую таблицу. Затем вы можете выполнить SP и вернуть данные в выходной параметр.

Однако, если вы действительно хотите идти по этому пути, то выполнение

ExecuteNonQuery() 

... не будет возвращать данные, только записи пострадавших. Если вы хотите вернуть некоторые данные, такие как идентификатор вновь вставленной записи, вы хотите использовать

ExecuteScalar() 

... который позволит скалярное значение должно быть возвращено.

+1

Ваше вступительное заявление чисто основано на мнениях. Если вы собираетесь сделать такое заявление, вы должны поддержать его с обоснованными причинами. У многих разработчиков есть законные причины для сохранения их встроенного кода SQL. – Fred

+1

FYI: http://stackoverflow.com/questions/15142/what-are-the-pros-and-cons-to-keeping-sql-in-stored-procs-versus-code – Fred

+0

Да, это мое мнение @Fred , Я полагаю, это зависит от масштаба проекта, над которым вы работаете, и от количества различных запросов к базе данных. Я просто сказал, что размещение SQL в базе данных - это более удобное, более чистое, более безопасное, более эффективное, более удобное и многоразовое решение. Хорошие аргументы за и против встроенного SQL в вашей ссылке, но я всегда буду стараться помещать язык запросов базы данных, где он принадлежит ... в базе данных. – Steveo

Смежные вопросы