2014-11-11 8 views
0

Q 1:
У меня есть пустая таблица для вставки записей. Имеет один столбец типа IDENTITY, для которого я хочу вставить значения вручную.SQL Server 2008 R2: IDENTITY

Пример:

Таблица: Сотрудник

create table Employee 
(
    ID int IDENTITY(1,1) PRIMARY KEY, 
    LastName varchar(255) NOT NULL, 
    FirstName varchar(255), 
    Address varchar(255), 
    City varchar(255) 
) 

Вставка записей:

SET IDENTITY_INSERT Employee ON; 
insert into Employee values(101,'ABC','XYZ','HighStreet','Moscow') 

Ошибка:

Msg 8101, уровень 16, состояние 1, строка 1
Явное значение для столбца идентификации в таблице «Сотрудник» может быть указано только при использовании списка столбцов, а IDENTITY_INSERT включен.

Q 2:

Как получить последний вставленный ID работника без использования MAX и Top?

+2

[Плохие привычки пинают: с помощью SELECT */опускаем список столбцов] (http://sqlblog.com/blogs/ aaron_bertrand/archive/2009/10/10/bad-habits-to-kick-using-select-omitting-the-column-list.aspx) –

+0

@marc_s, +1 Благодарим вас за полезную ссылку. – Meem

ответ

2

Ответ 1

Если вы попытаетесь вставить значение в столбце Удостоверения вы получите сообщение об ошибке

Невозможно вставить явное значение для столбца идентификаторов в таблице «Сотрудник» когда IDENTITY_INSERT является установите значение OFF.

Написать название SET IDENTITY_INSERT таблица ON до сценария вставки и SET имя IDENTITY_INSERT таблицы Off после вставки сценария

SET IDENTITY_INSERT Employee ON 
    insert into Employee(ID,LastName,FirstName,Address,City) values 
    (101,'ABC','XYZ','HighStreet','Moscow') 
SET IDENTITY_INSERT Employee OFF 

Ответ 2

Есть несколько способов, с помощью, как это после вставки выписка

После ВСТАВКИ, SELECT INTO или насыпной заявление копирования завершено, @@ IDENTITY содержит последнее значение идентификатора, который генерируется в заявлении

SELECT @@IDENTITY 

возвращает последнее значение IDENTITY производится на соединении, независимо таблицы, которая произвела значение, и вне зависимости от области действия , которая произвела значение.

SELECT SCOPE_IDENTITY() 

Она возвращает последнее значение IDENTITY производится на соединении и с помощью оператора в том же объеме, независимо от таблицы, которая производится значение .

SELECT IDENT_CURRENT(‘Employee’) 

возвращает последнее значение IDENTITY производится в таблице, независимо от соединения, которое создано значение, и независимо от объема утверждение, что производится значение. IDENT_CURRENT не ограничивается областью и сеансом ; он ограничен указанной таблицей. IDENT_CURRENT возвращает значение идентификатора, сгенерированное для конкретной таблицы, в любом сеансе и в любой области.

MSDN SOURCE

+0

отвечает на вопрос OP, не обращается к ошибке, я думаю, что это то, о чем они просили, - не на 100% уверен –

+0

@Ganesh_Devlekar, Большое вам спасибо. – Meem

+0

@Meem Ваше приветствие –

0

Вы можете использовать IDENT_CURRENT('table_name'), чтобы получить текущее значение.

+1

Я бы рекомендовал использовать ** 'SCOPE_IDENTITY()' ** вместо всего остального, чтобы захватить вновь вставленное значение идентификации. [См. Это сообщение в блоге для объяснения относительно WHY] (http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity -of-записи /) –

0

Для внешнего значения идентичности столбца Имя столбца данной явно является Must ниже

SET IDENTITY_INSERT Employee ON; 
insert into Employee(ID ,LastName,FirstName,Address,City) 
values(101,'ABC','XYZ','HighStreet','Moscow') 
Смежные вопросы