Sql server 使用QSqlQuery检索作用域\标识() bool ok=query.exec(“创建表person(IdTable INTEGER IDENTITY(1,1)非空主键,LastName varchar(255),FirstName varchar(255)); bool ok1=query.exec(“插入个人值('Wijethilake','Tharanga'); QSqlQuery作用域标识(“选择作用域标识()作为当前标识;”); QSqlRecord rec=scope_Identity.record(); qDebug()
这可能与QSqlQuery的操作方式有关 我不知道QSqlQuery,但在其他语言中,Sql server 使用QSqlQuery检索作用域\标识() bool ok=query.exec(“创建表person(IdTable INTEGER IDENTITY(1,1)非空主键,LastName varchar(255),FirstName varchar(255)); bool ok1=query.exec(“插入个人值('Wijethilake','Tharanga'); QSqlQuery作用域标识(“选择作用域标识()作为当前标识;”); QSqlRecord rec=scope_Identity.record(); qDebug(),sql-server,database,qt,Sql Server,Database,Qt,这可能与QSqlQuery的操作方式有关 我不知道QSqlQuery,但在其他语言中,INSERT和SELECT-SCOPE\u-IDENTITY()…语句在不同的范围内运行时,INSERT的结果对于SCOPE\u-IDENTITY()是不可访问的-通常是因为数据访问层将它们作为动态SQL执行。您可以通过在数据库服务器上为SQL:BatchCompleted事件运行SQL跟踪来验证这一点 假设这就是问题所在,您需要在同一范围内执行这两条语句以返回新标识。我不确定这是否是有效的QSqlQuery,
INSERT
和SELECT-SCOPE\u-IDENTITY()…
语句在不同的范围内运行时,INSERT
的结果对于SCOPE\u-IDENTITY()是不可访问的
-通常是因为数据访问层将它们作为动态SQL执行。您可以通过在数据库服务器上为SQL:BatchCompleted
事件运行SQL跟踪来验证这一点
假设这就是问题所在,您需要在同一范围内执行这两条语句以返回新标识。我不确定这是否是有效的QSqlQuery,但类似于
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();
如果人员有任何插入触发器,则此操作将不起作用:
QSqlQuery scope_Identity("INSERT INTO person OUTPUT inserted.IdTable VALUES ('Wijethilake','Tharanga');");
QSqlRecord rec = scope_Identity.record();
qDebug() << scope_Identity.isValid();
我不确定这为什么行不通:
QSqlQuery scope_Identity("INSERT INTO person OUTPUT inserted.IdTable
VALUES ('Wijethilake','Tharanga');");
您可以这样做:
QSqlQuery scope_Identity("INSERT INTO person VALUES
('Wijethilake','Tharanga'); SELECT SCOPE_IDENTITY() AS
Current_Identity;");
非常感谢你的答复,我必须告诉你,你问题的第二部分帮助了我。
QSqlQuery scope_Identity("INSERT INTO person VALUES
('Wijethilake','Tharanga'); SELECT SCOPE_IDENTITY() AS
Current_Identity;");
QString query("**some_query_to_insert; some_query_to_select_with_SCOPE_IDENTITY()**");
QSqlQuery sql(QSqlDatabase::database());
sql.exec("**EXEC('**"+query+"**')**");
sql.next();
QVariant v = sql.value(*n*);