Резюме
В настоящее время я пишу приложение, в котором я разместил свои инструкции SQL в параметрах проекта.
В коде я получаю значение моего запроса, который возвращает сам запрос. Скажем, например, что мой SQL-запрос выглядит так:
select col1, col2, col3 from my_table
Кроме того, col1
, col2
и col3
взяты из разных таблиц и перенесены как внешний ключ в my_table. Поэтому, когда дело доходит до вставки, мне нужно выполнить несколько операторов INSERT, чтобы получить значения из других таблиц для этих вышеупомянутых столбцов. Скажем так:
BEGIN TRANSACTION
insert into first_table (col_x, col_y) values ('col_x', 'col_y')
insert into second_table (col_z, col_a) values ('col_z', 'col_a')
insert into third_table (col_b, col_c) values ('col_b', 'col_c')
и наконец:
insert into my_table (col1, col2, col3, col_v) values (@col1, @col2, @col3, 'col_v')
COMMIT
Предположим, что эти столбцы col1
, col2
, col3
являются автоматически целыми числами для таблиц first
, second
и third
.
Вопросы
Могу ли я записать сложный оператор SQL в свойство IDbCommand.CommandText, когда каждая инструкция будет разделена точкой с запятой (;
)?
Можно ли включить BEGIN TRANSACTION...COMMIT/ROLLBACK
в это свойство CommandText
?
Короче, могу ли я написать что-то подобное?
Using cnx = New SqlConnection(connString)
Using cmd = cnx.CreateCommand()
cmd.CommandText = "BEGIN TRANSACTION " _
& "insert into first_table (col_x, col_y) values ('col_x', 'col_y');" _
& "insert into second_table (col_z, col_a) values ('col_z', 'col_a');" _
& "insert into third_table (col_b, col_c) values ('col_b', 'col_c');" _
& "insert into my_table (col1, col2, col3, col_v) values (@col1, @col2, @col3, 'col_v'); " _
& "COMMIT"
cmd.ExecuterNonQuery()
End Using
End Using
РЕДАКТИРОВАТЬ # 1
Я должен был упомянуть об этом раньше ... Ответ Мака - это то, что я хотел бы сделать, за исключением того, что я не могу из-за странных политик в ИТ-отделе моего клиента, за исключением того, что я использую их пользовательский компонент, который я скорее избегайте ради простоты. Обратите внимание, что я все равно проголосовал за ответ Мак, поскольку это жизнеспособное решение, несмотря ни на что.
Заранее благодарим за вашу драгоценную помощь и время! Это очень важно для меня!