Подтвердить что ты не робот

В SQL Server можно получить "id" из записи при выполнении Insert?

В SQL Server 2005 у меня есть поле "id" в таблице, у которой свойство Is Is Ident установлено на "Yes". Таким образом, когда в этой таблице выполняется вставка, "id" автоматически устанавливается на следующее инкрементное целое число. Есть ли простой способ, когда вставка выполняется, чтобы получить то, что был установлен "id" , без необходимости делать оператор Select сразу после Insert?

дубликат:
Лучший способ получить идентификатор вставленной строки?

4b9b3361

Ответ 1

В .Net, по крайней мере, вы можете отправить несколько запросов на сервер за один раз. Я делаю это в своем приложении:

command.CommandText = "INSERT INTO [Employee] (Name) VALUES (@Name); SELECT SCOPE_IDENTITY()";
int id = (int)command.ExecuteScalar();

Работает как шарм.

Ответ 2

Если вы вставляете несколько строк, использование предложения OUTPUT и INSERTED.columnname в операторе insert - это простой способ получить все идентификаторы в таблице temp.

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  

Ответ 4

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();

Ответ 5

Вам нужно выбрать функцию scope_identity().

Чтобы сделать это из кода приложения, я обычно инкапсулирую этот процесс в хранимую процедуру, поэтому он по-прежнему выглядит как один запрос к моему приложению.

Ответ 6

Я предпочитаю прикреплять триггер к таблице с помощью менеджера предприятия. Таким образом, вам не нужно беспокоиться о том, чтобы выписывать в свой код дополнительные SQL-инструкции. Мой выглядит примерно так:

Создать триггер tblName На dbo.tblName Для вставки В виде выберите new_id = @@IDENTITY

Затем изнутри вашего кода обрабатывайте ваши инструкции вставки, такие как команды выбора. Просто выполните и оцените результаты. столбец "newID" будет содержать идентификатор только что созданной строки.