Как получить Вставить идентификатор в MSSQL в PHP? - PullRequest
7 голосов
/ 22 февраля 2009

Что говорит заголовок вопроса. С запросом, таким как SELECT @@IDENTITY AS ins_id, мне нужно предоставить имя таблицы или любую другую информацию, чтобы указать, о какой таблице / базе данных я говорю?

Ответы [ 3 ]

16 голосов
/ 22 февраля 2009

@@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
1 голос
/ 26 октября 2015

Вот фрагмент кода, основанный на коде Joomla. $ dbh - соединение с базой данных (результат mssql_connect ()). Имя ключа (ID) обновляется, если вы передаете аргумент $ keyName.

Этот код использует ключевое слово MSSQL «OUTPUT» для получения идентификатора (или любого необходимого значения) вставленного значения.

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;
}
1 голос
/ 22 февраля 2009

Нет; он работает так же, как SELECT LAST_INSERT_ID () в mysql, извлекая последнее вставленное значение идентификатора. Возможно, вы захотите взглянуть на этот углубленный экзамен , чтобы узнать больше о том, что вас может заинтересовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...