Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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 使用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,

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

我不知道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*);