问题标题已经说明了一切。使用这样的查询SELECT @@IDENTITY AS ins_id
,我需要提供表名或任何其他信息来指定我所讲的是哪个表/数据库吗?
问题标题已经说明了一切。使用这样的查询SELECT @@IDENTITY AS ins_id
,我需要提供表名或任何其他信息来指定我所讲的是哪个表/数据库吗?
@@IDENTITY
会返回当前会话中最近生成的自增值,但在大多数情况下,您可能更想使用SCOPE_IDENTITY
,因为它可以返回当前作用域内最近生成的自增值。@@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
这是一个基于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;
}