Как получить последний вставленный идентификатор записи с использованием C # и DB2 - PullRequest
0 голосов
/ 16 ноября 2018

Использование C # с DB2 в моем приложении.Хотите получить последний вставленный идентификатор записи для передачи в другой оператор SQL.Ниже приведен мой код:

        DB2Command myCommand = new DB2Command();
    DB2Connection con = new DB2Connection(ConnectionString);
    myCommand.Connection = con;

    try
    {
        myCommand.CommandType = CommandType.Text;
        myCommand.CommandText = "SELECT ID FROM FINAL TABLE (INSERT INTO MyTable(col1,col2) "
               + " VALUES (val1, val2)";


        con.Open();
        lastInstertedId = myCommand.ExecuteNonQuery();
    }

Но выдается ошибка:

Операция не выполнена, поскольку операция не поддерживается типом указанной таблицы.

Если я изменю CommandText ниже указанной строки, то он работает нормально, но возвращает 1 (номер строки).

myCommand.CommandText = "INSERT INTO MyTable(col1,col2) "
           + " VALUES (val1, val2)";

Пожалуйста, дайте мне знать, как получить последнюю вставленную записьId.

Ответы [ 3 ]

0 голосов
/ 16 ноября 2018

Должно быть что-то вроде ниже.

DB2Command myCommand = new DB2Command();
DB2Connection con = new DB2Connection(ConnectionString);
myCommand.Connection = con;

try
{
    myCommand.CommandType = CommandType.Text;
    myCommand.CommandText = "SELECT ID FROM FINAL TABLE (INSERT INTO MyTable(col1,col2) "
           + " VALUES (val1, val2)";
    Integer lastInstertedId = (Integer)myCommand.ExecuteScalar();
}
0 голосов
/ 16 ноября 2018

Я полагаю, ваш стол ORGANIZE BY COLUMN. Эти таблицы в настоящее время не поддерживают data-change-table-reference

$ db2 "create table m(i int) organize by column"
DB20000I  The SQL command completed successfully.

$ db2 "select * from final table(insert into m values 1)"
SQL1667N  The operation failed because the operation is not supported with the 
type of the specified table.  Specified table: "PAUL.M".  Table type: 
"ORGANIZE BY COLUMN".  Operation: "FINAL|NEW|OLD TABLE".  SQLSTATE=42858

$ db2 "create table m(i int) organize by row"
DB20000I  The SQL command completed successfully.

$ db2 "select * from final table(insert into m values 1)"

I          
-----------
          1

  1 record(s) selected.
0 голосов
/ 16 ноября 2018

я думаю, что sql должно быть:

 myCommand.CommandText = "SELECT ID FROM NEW TABLE (INSERT INTO MyTable(col1,col2) "
           + " VALUES (val1, val2)";

Что мы сделали в DB2, так это просто представили таблицу переходов триггера NEW TABLE в предложении from. Таким образом, когда вы помещаете оператор INSERT в предложение from, этот оператор вставки выполняется и в процессе создается таблица переходов. Эта таблица переходов, которая включает в себя все модификации любых предшествующих триггеров, затем может быть запрошена.

https://www.ibm.com/developerworks/community/blogs/SQLTips4DB2LUW/entry/select_from_insert?lang=en

обратите внимание, что FINAL был заменен на NEW

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...