T-Sql @@ Identity - PullRequest
       41

T-Sql @@ Identity

6 голосов
/ 13 сентября 2010

Кто-нибудь знает, как я могу вернуть @@Identity при использовании T-Sql?

Примерно так:

set @Sql = "insert into table....values()..."
exec @sql
return @@Identity

Ответы [ 5 ]

7 голосов
/ 13 сентября 2010

Похоже, одним из ваших неявных требований является выполнение динамического SQL.Хотя я бы посоветовал против этого, вы можете выполнить то, что вы ищете, с помощью этого:

set @Sql = 'insert into table....values()...; select SCOPE_IDENTITY()'
exec(@Sql)
5 голосов
/ 13 сентября 2010

Как это:

INSERT INTO Table(...)
OUTPUT INSERTED.IdColumn
VALUES(...)
4 голосов
/ 13 сентября 2010

Добавьте "; выберите @@ identity" к вашему оператору вставки:

insert into tab (x,y,z) values (a,b,c); select @@identity

Возвращаемое значение - идентификатор (используйте ExecuteScalar)

3 голосов
/ 13 сентября 2010
INSERT INTO TableName (Field1, Field2, Field3) VALUES (1, 2, 3);
SELECT SCOPE_IDENTITY();

Это пакет из нескольких операторов, поэтому я не уверен, что каждая клиентская библиотека будет возвращать значения одинаково;например, в классическом ADO может потребоваться перейти к следующему набору записей, прежде чем вы сможете прочитать значение.Но если вы используете ADO.NET, я знаю, что вы можете просто использовать ExecuteScalar для всей приведенной выше строки, и он вернет ваше SCOPE_IDENTITY значение очень хорошо.

Внимание:ADO.NET вернет значение в виде decimal, а не int, как вы могли ожидать.Это потому, что SCOPE_IDENTITY по какой-либо причине набирается как numeric(38,0).Поэтому вам нужно либо привести результат ExecuteScalar к decimal, прежде чем привести его к int, либо к SELECT CAST(SCOPE_IDENTITY() AS INT) (при условии, что ваше поле IDENTITY имеет тип INT, а не какой-либо более крупный числовой тип).

1 голос
/ 13 сентября 2010

Вы можете использовать это

Insert into Table(Col2, Col3) 
output inserted.Id
values ('xyz', 'abc')

Где Id - это ваше поле для идентификации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...