我试过这种方式:
$result = odbc_exec($connection, 'SELECT id FROM MyTable WHERE id = @@Identity');
但它给了我
语法错误:意外T_VARIABLE
编辑:感谢您的帮助,这是完整的逻辑:
$result = odbc_exec($connection, 'INSERT data into the table;SELECT SCOPE_IDENTITY() AS id;');
$row = odbc_fetch_array($result); //this line gives the error!
$id = $row['id'];
edit2:我错过了一个“;” = _ =
无论如何,scope_identity不起作用:给出
此索引没有可用的元组
on fetcharray call
答案 0 :(得分:2)
假设IDENTITY
列名为id
,请尝试:
INSERT dbo.Table
(column_list)
OUTPUT INSERTED.id
VALUES (values_list);
答案 1 :(得分:1)
插入行后,您可以使用scope_identity()
查找最后插入的ID。没有必要在原始表格中查找:
SELECT SCOPE_IDENTIY()
如果该行已插入另一个连接,您可以查询id
的最大值:
SELECT max(id) FROM MyTable
答案 2 :(得分:1)
你为什么不这样说:
$result = obdc_exec('INSERT dbo.MyTable(...) VALUES(...); SELECT id = SCOPE_IDENTITY();');
或者更好的是,将逻辑放入存储过程并停止在应用程序代码中隐藏临时SQL。
编辑因为PHP很奇怪并且可能会将您的INSERT视为结果集,您可能需要使用它(原谅我,但我不是PHP专家):
odbc_next_result($result);
您也可以通过说:
来取消第一个结果SET NOCOUNT ON; INSERT ...; SELECT id = SCOPE_IDENTITY();
再次,我不知道,我不做PHP。我仍然认为你应该在存储过程中这样做。