![](/img/trans.png)
[英]How to select SCOPE_IDENTITY() using Microsoft SQL Driver in PHP?
[英]“Executing SQL directly; no cursor” error when using SCOPE_IDENTITY/IDENT_CURRENT
google上关于此错误的信息不多,所以我在这里问。 我正在将一个PHP Web应用程序从使用MySQL切换到SQL Server 2008(使用ODBC,而不是php_mssql)。 运行查询或其他任何问题都没有问题,但是当我尝试执行scope_identity(或任何类似的函数)时,出现错误“直接执行SQL;没有游标”。 我将在插入后立即执行此操作,因此它仍应在范围内。 运行相同的插入语句,然后查询插入ID在SQL Server Management Studio中可以正常工作。 这是我现在的代码(数据库包装器类中的所有其他内容对于其他查询都可以正常工作,因此,我认为它现在不相关):
function insert_id(){
return $this->query_first("SELECT SCOPE_IDENTITY() as insert_id");
}
query_first是从查询的第一个字段返回第一个结果的函数(基本上等效于.net上的execute_scalar())。
完整的错误消息:
您可以尝试使用OUTPUT子句来解决:
INSERT INTO YourTable
(col1, col2, col3)
OUTPUT INSERTED.YourIdentityCol as insert_id
VALUES (val1, val2, val3)
该单个语句将插入行并返回标识值的结果集。
工作样本:
create table YourTestTable (RowID int identity(1,1), RowValue varchar(10))
go
INSERT INTO YourTestTable
(RowValue)
OUTPUT INSERTED.RowID as insert_id
VALUES
('abcd')
OUTPUT:
insert_id
-----------
1
(1 row(s) affected)
如果您一次插入多行,这也很好:
INSERT INTO YourTestTable
(RowValue)
OUTPUT INSERTED.RowID as insert_id
SELECT 'abcd'
UNION SELECT '1234'
UNION SELECT 'xyz'
OUTPUT:
insert_id
-----------
2
3
4
(3 row(s) affected)
我不确定如何执行实际的插入语句,但是scope_identity()将仅返回该会话的最后一个标识值,即相同的SPID。
如果您连接到数据库并执行插入,然后再次连接到数据库,则scope_identity()将始终返回NULL,因为它们在两个不同的会话中一样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.