Это может быть связано с тем, как работает QSqlQuery.
Я не знаю QSqlQuery, но у меня была похожая проблема с SCOPE_IDENTITY()
в других языках, где операторы INSERT
и SELECT SCOPE_IDENTITY()...
выполняются в разных областях - это означает, что результаты INSERT
недоступен для SCOPE_IDENTITY()
- обычно потому, что они выполняются как динамический SQL на уровне доступа к данным. Вы можете проверить это, запустив трассировку SQL на сервере базы данных для событий SQL:BatchCompleted
.
Предполагая, что это проблема, вам нужно выполнить оба оператора в одной и той же области видимости, чтобы вернуть новый идентификатор. Я не уверен, действительно ли это QSqlQuery, но что-то вроде
QSqlQuery scope_Identity("INSERT INTO person VALUES ('Wijethilake','Tharanga'); SELECT SCOPE_IDENTITY() AS Current_Identity;");
QSqlRecord rec = scope_Identity.record();
qDebug() << scope_Identity.isValid();
В SQL 2005 и более поздних версиях альтернативой SCOPE_IDENTITY()
является предложение OUTPUT
, которое позволяет выполнить все это одним оператором:
QSqlQuery scope_Identity("INSERT INTO person OUTPUT inserted.IdTable VALUES ('Wijethilake','Tharanga');");
QSqlRecord rec = scope_Identity.record();
qDebug() << scope_Identity.isValid();