Tha*_*nga 2 database sql-server qt
bool ok = query.exec("CREATE TABLE person ( IdTable INTEGER IDENTITY(1,1) NOT NULL PRIMARY KEY, LastName varchar(255), FirstName varchar(255) )");
bool ok1 = query.exec("INSERT INTO person VALUES ('Wijethilake','Tharanga')");
QSqlQuery scope_Identity("SELECT SCOPE_IDENTITY() AS Current_Identity;");
QSqlRecord rec = scope_Identity.record();
qDebug() << scope_Identity.isValid();
Run Code Online (Sandbox Code Playgroud)
这返回false.它是qt的错误还是我的范围Identity语句错误.我非常感谢有人帮忙.
谢谢.
这可能与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();
Run Code Online (Sandbox Code Playgroud)
在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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
531 次 |
| 最近记录: |