gpt4 book ai didi

sql-server - 使用 QSqlQuery 检索 SCOPE_IDENTITY()

转载 作者:搜寻专家 更新时间:2023-10-30 20:02:47 25 4
gpt4 key购买 nike

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();

这会返回错误。是 qt 有问题还是我的范围身份声明有误。我真的很感谢有人在这方面的帮助。

谢谢。

最佳答案

这可能与 QSqlQuery 的操作方式有关。

我不知道 QSqlQuery,但我在使用 INSERTSELECT SCOPE_IDENTITY() 的其他语言中遇到过与 SCOPE_IDENTITY() 类似的问题。 .. 语句在不同的范围内运行 - 这意味着 INSERT 的结果无法访问 SCOPE_IDENTITY() - 通常是因为它们作为动态 SQL 执行由数据访问层。您可以通过在数据库服务器上针对 SQL:BatchCompleted 事件运行 SQL 跟踪来验证这一点。

假设这是问题所在,您需要在同一范围内执行这两个语句以返回新标识。我不确定这是否是有效的 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();

关于sql-server - 使用 QSqlQuery 检索 SCOPE_IDENTITY(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7792293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com