如何在MSSQL中插入ID在PHP中?
题目说的是什么? 通过SELECT @@IDENTITY AS ins_id
等查询,是否需要提供表名或其他信息来指定我正在讨论哪个表/数据库?
@@IDENTITY
返回当前会话中生成的最新身份。 在大多数情况下,您可能需要使用SCOPE_IDENTITY
,它会返回当前作用域中生成的最新标识。
例如,如果向table1中插入一行,但该插入触发将行插入到table2中的触发器,则@@IDENTITY
将从table2返回标识,而SCOPE_IDENTITY
将从table1返回标识。
INSERT INTO my_table (my_column) VALUES ('test') -- return the identity of the row you just inserted into my_table -- regardless of any other inserts made by triggers etc SELECT SCOPE_IDENTITY() AS ins_id
没有; 它的工作方式与MySQL中的SELECT LAST_INSERT_ID()非常相似,它检索插入的最后一个标识值。 你可能想看看这个深入的检查,以更多的关于你可能想要关心的事情。
这是一些基于Joomla代码的代码片段。 $ dbh是数据库连接(mssql_connect()的结果)。 如果传递$ keyName参数,密钥名称(ID)会更新。
此代码使用MSSQL关键字“OUTPUT”来获取插入值的ID(或任何所需的值)。
function mssql_insertObject($table, &$object, $keyName = NULL) { global $dbh; if($keyName) { $fmtsql = 'INSERT INTO '. $table .' ( %s ) OUTPUT INSERTED.' . $keyName . ' VALUES ( %s ) '; } else { $fmtsql = 'INSERT INTO '. $table .' ( %s ) VALUES ( %s ) '; } $fields = array(); foreach (get_object_vars( $object ) as $k => $v) { if (is_array($v) or is_object($v) or $v === NULL) { continue; } if ($k[0] == '_') { // internal field continue; } $fields[] = $k; $values[] = "'" . str_replace("'", "''", $v) . "'"; } $sql = sprintf( $fmtsql, implode( ",", $fields ) , implode( ",", $values ) ); $query = mssql_query($sql, $dbh); if($query === false) { return false; } if(is_resource($query)) { if($keyName) { $id = mssql_result($query, 0, 0); if($id) { $object->$keyName = $id; } } mssql_free_result($query); } return true; }