0

我试过这样:

$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']; 

编辑2:我错过了一个“;” =_=

无论如何 scope_identity 不起作用:给出

此索引处没有可用的元组

在 fetcharray 调用

4

2 回答 2

1

插入一行后,您可以使用scope_identity(). 无需在原始表格中查找:

SELECT SCOPE_IDENTIY()

如果该行是在另一个连接上插入的,则可以查询 的最大值id

SELECT max(id) FROM MyTable
于 2012-09-26T13:33:18.210 回答
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。我仍然认为您应该在存储过程中执行此操作。

于 2012-09-26T13:36:39.013 回答