В SQL Server можно ли получить «идентификатор» записи при выполнении вставки?

StackOverflow https://stackoverflow.com/questions/55159

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

По крайней мере, в .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().

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

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

Создать триггер tblName на dbo.tblname для вставки в качестве выбора new_id = @@ Identity

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

Вероятно, это лучшее рабочее решение для SQL Server, которое я нашел.Сервер Sql возвращает значение столбца идентификаторов после оператора вставки

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top