Дополнительно
SQL Server - Возвращаемое значение после INSERT
Я пытаюсь получить ключ-значение обратно после INSERT-заявления. Пример: У меня есть таблица с атрибутами name и id. id - это сгенерированное значение.
INSERT INTO table (name) VALUES('bob');
Теперь я хочу получить id обратно в том же шаге. Как это делается?
Мы используем Microsoft SQL Server 2008.
278
13
Нет необходимости в отдельном выберите...
Это работает для не-идентичности столбцов (например GUID) тоже
Используйте
SCOPE_IDENTITY()
для получения нового значения IDhttp://msdn.microsoft.com/en-us/library/ms190315.aspx
Самая безопасная ставка, так как есть известная проблема с пунктом вывода конфликта на таблицы с триггерами. Делает это достаточно ненадежный, поскольку даже если ваш стол не'В настоящее время Т есть какие-либо триггеры - кто-то добавляет одну линию сломать ваше приложение. Время вроде бомбы поведения.
См. В статье MSDN для более глубокого объяснения:
http://blogs.msdn.com/b/sqlprogrammability/archive/2008/07/11/update-with-output-clause-triggers-and-sqlmoreresults.aspx
Рамках субъект выполняет что-то похожее на ГБН'ы ответа:
Выходные результаты сохраняются во временной таблице переменных, а потом выбираться обратно клиенту. Должны быть в курсе попалась:
Я понятия не имею, почему эф бы внутреннее соединение эфемерное в реальной таблице (при каких обстоятельствах бы не матч).
Но, что's что ФВ делает.
В SQL Server 2008 или новее только. Если это's 2005 года, затем вы'вновь повезло.
`Функция@@Identity-это системная функция, которая возвращает последнее значение идентификатора, вставленное.
Вы можете использовать
scope_identity()
для выбора идентификатора строки, которую вы только что вставили в переменную, а затем просто выбрать любые столбцы из этой таблицы, где id = идентификатору, который вы получили изscope_identity()
.Смотрите здесь информацию MSDN http://msdn.microsoft.com/en-us/library/ms190315.aspx
Лучшим и наиболее надежным решением является использование функции scope_identity()`.
Просто вы должны сделать сферу личности после каждого Insert и сохранить его в переменной, так можно назвать две вставки в той же области.
функция ident_current
и `функция@@Identity может быть они работают, но они не являются безопасными области. Вы можете иметь проблемы в большом приложенииБолее подробно здесь Майкрософт документации
Есть много способов, чтобы выйти после вставки
Функция ident_current: он возвращает последний стиль, созданный для конкретной таблицы или представления в любой сессии.
Функция scope_identity: он возвращает последний тож из той же сессии, и той же области. Объем хранимых процедур/триггеров и т. д.
@@Личность: он возвращает последний тож из той же сессии.
Это, как я использую выход вставить, при вставке в таблицу, которая использует ID в столбец идентификаторов в SQL сервере:
Вы можете добавить Select для вашего оператора Insert. Целое число Мьинт = Вставить в таблицу table1 (имени) значения('Фред'); выберите функции scope_identity(); Это вернет значение личности при выполнении скалер.
Порядок параметров в строке подключения-это иногда важно. Поставщик параметра'ы местонахождение можно разбить записей курсор после добавления строки. Мы видели такое поведение с поставщика sqloledb.
После добавления строки, поля строк не доступен, если поставщик указан как первый параметр в строке подключения. Когда поставщик находится в любом месте в строке подключения, кроме как первый параметр, недавно вставленные поля строк не доступен. Когда мы переехали поставщика первого параметра, строки волшебным образом появились поля.
Это может быть немного старомодно, но есть много людей, использующих старые версии PHP, до 5.5 если быть более точным. Более подробную информацию можно найти на http://php.net/manual/en/function.mysql-insert-id.php
После выполнения вставки в таблицу со столбцом identity вы можете сослаться на @@IDENTITY, чтобы получить значение: http://msdn.microsoft.com/en-us/library/aa933167%28v=sql.80%29.aspx