В SQL Server можно ли получить " id " записи при выполнении Insert?
в SQL Server 2005 у меня есть поле "id "в таблице, в которой свойство" is Identity "имеет значение "Yes". Таким образом, когда вставка выполняется в этой таблице, "id" автоматически устанавливается на следующее инкрементное целое число. Есть ли простой способ, когда вставка выполняется, чтобы получить то, что" id " был установлен без необходимости делать оператор Select сразу после вставки?
копия:
лучший способ получить идентификатор вставленной строки?
7 ответов
в .Net, по крайней мере, вы можете отправить несколько запросов на сервер за один раз. Я делаю это в своем приложении:
command.CommandText = "INSERT INTO [Employee] (Name) VALUES (@Name); SELECT SCOPE_IDENTITY()";
int id = (int)command.ExecuteScalar();
работает как шарм.
если вы вставляете несколько строк, используйте OUTPUT
и INSERTED.columnname
положения о insert
оператор-это простой способ получить все идентификаторы во временную таблицу.
DECLARE @MyTableVar table( ID int,
Name varchar(50),
ModifiedDate datetime);
INSERT MyTable
OUTPUT INSERTED.ID, INSERTED.Name, INSERTED.ModifiedDate INTO @MyTableVar
SELECT someName, GetDate() from SomeTable
функция scope_identity() является предпочтительным способом, см.: 6 Различных Способов Получить Текущее Значение Идентификатора
SCOPE_IDENTITY (); ваш лучший выбор. И если вы используете .NET, просто передайте наш параметр и проверьте значение после выполнения процедуры.
CREATE PROCEDURE [dbo].[InsertProducts]
@id INT = NULL OUT,
@name VARCHAR(150) = NULL,
@desc VARCHAR(250) = NULL
AS
INSERT INTO dbo.Products
(Name,
Description)
VALUES
(@name,
@desc)
SET @id = SCOPE_IDENTITY();
выберите функции scope_identity ().
чтобы сделать это из кода приложения, я обычно инкапсулирую этот процесс в хранимую процедуру, чтобы он все еще выглядел как один запрос к моему приложению.
Я предпочитаю прикреплять триггер к таблице с помощью enterprise manager. Таким образом, вам не нужно беспокоиться о написании дополнительных операторов sql в вашем коде. Мои выглядят примерно так:
создать триггер tblName На ДБО.tblName для вставок Как выберите new_id = @@IDENTITY
затем, из вашего кода, обработайте свои инструкции insert как Select - просто выполните и оцените результаты. столбец "newID" будет содержать идентификатор строки ты только что создал.
Это, вероятно, лучшее рабочее решение, которое я нашел для SQL Server.. Sql Server возвращает значение столбца identity после инструкции insert