2012-01-16 21 views
5

¿Cómo usar @@ IDENTIDAD cuando uso INSERT SELECT?Insertar inserción de SQL @@ Identidad

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

¿tiene 'Quiz_QuizQuestion' realidad tiene ningún columnas definidas como' IDENTITY' (NB: shouldn 99% del tiempo que necesita 'SCOPE_IDENTITY' pero de todos modos? '' explicar por qué '@ENTITYID ES NULO' aquí) –

+0

no, solo uno, EntityID - clave – AFetter

+0

Bueno, es por eso que es NULL entonces. Devuelve el último valor de identidad insertado. (Http://msdn.microsoft.com/en-us/library/ms187342.aspx) para su sesión. –

Respuesta

4

No es necesario insertar @@ IDENTITY en la tabla en su escenario - que tiene que CREAR mesa con IDENTIDAD campo de la siguiente manera:

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

Esto es copiado textualmente de la MSDN página acerca de @@IDENTITY: "Después de INSERT, SELECT INTO, o la declaración de copia masiva completa, @@IDENTITY contiene el último valor de identidad generado por la declaración. Si la declaración no afectó ninguna tabla con columnas de identidad, @@IDENTITY devuelve NULL. Si se insertan varias filas, generando múltiples valores de identidad, @@ IDENTITY devuelve el último valor de identidad generado. "(link). No sé si necesita más información que eso.

+0

sql mensaje: (1 fila (s) afectada (s)) @@ IDENTITY = NULL; – AFetter

+2

@Coelho - Usted dijo en un comentario que su tabla no tiene una columna de identidad, por lo que '@@ IDENTITY' será' NULL' después de su inserción – Lamak

+0

Lo sentimos, la tabla tiene una clave, EntityID es una clave principal. – AFetter

1

@@identity solo muestra el último valor insertado . en un IDENTITY field

Es necesario crear un IDENTITY field lugar :)

Cuestiones relacionadas