В .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 = @@ ИДЕНТИФИКАЦИОННЫЕ ДАННЫЕ
Затем из Вашего кода, рассматривают Ваши операторы вставки как избранные операторы - Просто выполняют и оценивают результаты. "newID" столбец будет содержать идентификационные данные строки, которую Вы просто создали.