2013-10-10 6 views
0

У меня возникли проблемы с моим запросом sql. Я хотел бы ВСТАВИТЬ некоторые данные в первой таблице, а затем скопировать идентификатор из последней вставки в другую таблицу в том же запросе.Несколько INSERTS в одном запросе

Я вставляю код ниже и прыгаю, кто-то покажет мне правильный путь, потому что я получаю некоторые ";" ошибка.

sqL = "INSERT INTO Narocilo(ID_stranke, datum_sprejema, rok_izdobave, status_narocila, dodal) " + " VALUES('" & txt_idstranke.Text & "','" & Format(datum_sprejem.Value, "d. MM. yyyy") & "','" & Format(datum_izdobava.Value, "d. MM. yyyy") & "','" & txtstatus.Text & "','" & cmb_zaposleni.Text & "'); INSERT into ZadnjiID(zvisaj) SELECT @@IDENTITY FROM Narocilo" 
+1

Это не один запрос - это две строки. Разделите его на две части и выполните их отдельно. –

ответ

3

Доступ (JET/ACE) не позволит нескольким операторам SQL в одном запросе. Вы получаете сообщение об ошибке, потому что после точки с запятой вы помещаете второй оператор. Вам нужно сломать то, что вы делаете. @@IDENTITY по-прежнему будет работать, если вы не будете сначала убивать соединение. Например:

Dim conn As OleDb.OleDbConnection = New OleDb.OleDbConnection(connstr) 
Dim command As New OleDb.OleDbCommand 
conn.Open() 
command.Connection = conn 

command.CommandText = "INSERT INTO Narocilo(ID_stranke, datum_sprejema, rok_izdobave, status_narocila, dodal) " + " VALUES('" & txt_idstranke.Text & "','" & Format(datum_sprejem.Value, "d. MM. yyyy") & "','" & Format(datum_izdobava.Value, "d. MM. yyyy") & "','" & txtstatus.Text & "','" & cmb_zaposleni.Text & "');" 

command.ExecuteNonQuery() 
command.CommandText = "SELECT @@Identity" 
Dim idd As Integer = command.ExecuteScalar 
command.CommandText = "Your second INSERT statement using idd as the id here" 
command.ExecuteNonQuery() 
conn.Close() 

@@IDENTITY будет работать только с Integer напечатал AutoNumbers в доступе - не GUIDs. В качестве побочного примечания вы должны действительно параметризовать свои запросы, чтобы избежать атак SQL Injection.

+0

Это работает как должно. Спасибо. – Dave

0

Используйте этот код.

sqL = "INSERT INTO Narocilo(ID_stranke, datum_sprejema, rok_izdobave, status_narocila, dodal) " + " VALUES('" & txt_idstranke.Text & "','" & Format(datum_sprejem.Value, "d. MM. yyyy") & "','" & Format(datum_izdobava.Value, "d. MM. yyyy") & "','" & txtstatus.Text & "','" & cmb_zaposleni.Text & "'); INSERT into ZadnjiID(zvisaj); SELECT @@IDENTITY" 

Это значение возвращает значение столбца «Начальный» значение «Автоинкремент» для текущего соединения.

Если эта таблица имеет столбец Identity, то она вернет значение обратно.

Но для этого используйте SqlCommand.ExecuteScaler, чтобы он возвращал значение объекта, и вы можете использовать его в другой таблице.

спасибо.

+0

Dunno, если я делаю что-то, что программа не нравится, но после использования вашего утверждения я все еще получаю ошибку _ Символы, найденные после окончания SQL-запроса. – Dave

+0

Пожалуйста, объясните смысл этого запроса «INSERT in ZadnjiID (zvisaj);» –

+0

Я выложил это, потому что я попробую это, как вы показали мне. Чтобы получить последний идентификатор из запроса и поместить его в другую таблицу. Но я все еще получаю ошибку с запросом ниже: 'sqL =" INSERT INTO Narocilo (ID_stranke, datum_sprejema, rok_izdobave, status_narocila, dodal) "+" VALUES ('"& txt_idstranke.Text &"', '' & Format (datum_sprejem.Value, "d. MM. yyyy") & "',' '& Format (datum_izdobava.Value," d. MM. yyyy ") &"', '"& txtstatus.Text &"', '"& cmb_zaposleni.Text & "'); SELECT @@ IDENTITY "' – Dave

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