2012-01-16 7 views
5

Как использовать @@ IDENTITY, когда я использую INSERT SELECT?SQL insert select @@ Identity

DECLARE @ENTITYID AS BIGINT 

INSERT INTO Quiz_QuizQuestion 
SELECT @ENTITYID, 
     @DIFICULTLEVELCODE, 
     ENTITYID, 
     @QuizEntityId, 
     Title, 
     [Description], 
     [Description], 
     Duration 
FROM Education_Question 
WHERE EntityID = 1 --THIS SELECT RETURN JUST 1 RECORD 
SET @ENTITYID = @@IDENTITY 

SELECT @ENTITYID // NULL 
+2

ли 'Quiz_QuizQuestion' на самом деле есть какие-либо столбцы, определенные как' IDENTITY' (NB: 99% времени, вы должны 'SCOPE_IDENTITY' но в любом случае не должен 't объяснить, почему '@ENTITYID NULL' здесь) –

+0

нет, только один, EntityID - ключ – AFetter

+0

Ну вот почему тогда NULL. Он [возвращает значение, вставленное в последний раз.] (Http://msdn.microsoft.com/en-us/library/ms187342.aspx) для вашего сеанса. –

ответ

4

Вам не нужно вставлять @@ IDENTITY в таблицу в вашем сценарии - вы должны CREATE таблицы с IDENTITY поля, как это:

CREATE TABLE Quiz_QuizQuestion 
(
    EntityId int IDENTITY NOT NULL, 
    ... 
) 
GO 

DECLARE @ENTITYID AS BIGINT 

INSERT INTO Quiz_QuizQuestion 
SELECT 
     @DIFICULTLEVELCODE, 
     ENTITYID, 
     @QuizEntityId, 
     Title, 
     [Description], 
     [Description], 
     Duration 
FROM Education_Question 
WHERE EntityID = 1 --THIS SELECT RETURN JUST 1 RECORD 
SET @ENTITYID = SCOPE_IDENTITY() 

SELECT @ENTITYID // NULL 
2

Это скопированный из MSDN @@IDENTITY: «После INSERT, SELECT INTO или завершение массовой копии завершено, @@IDENTITY содержит последнее значение идентификации, сгенерированное оператором. Если заявление не повлияло на таблицы с идентификационными столбцами, то, @@IDENTITY возвращает NULL. Если несколько строк вставляются, генерируя несколько идентификационных значений, @@ IDENTITY возвращает последнее генерируемое значение. "(link). Я не знаю, нужна ли вам дополнительная информация.

+0

sql message: (затрагивается 1 строка (ы)) @@ IDENTITY = NULL; – AFetter

+2

@Coelho - Вы сказали в комментарии, что в вашей таблице нет столбца идентификации, поэтому '@@ IDENTITY' будет' NULL' после вашей вставки – Lamak

+0

К сожалению, в таблице есть ключ, EntityID - это первичный ключ. – AFetter

1

@@identity вводит только последнее значение . в IDENTITY field

Вам нужно создать IDENTITY field вместо :)