2012-01-16 20 views
5

Come utilizzare @@ IDENTITY quando utilizzo 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

ha 'Quiz_QuizQuestion' in realtà ha nessun colonne definite come' IDENTITY' (NB: il 99% delle volte si ha bisogno di 'SCOPE_IDENTITY' comunque ma shouldn spieghiamo perché '@ENTITYID È NULL' qui) –

+0

no, solo uno, EntityID - chiave – AFetter

+0

Beh ecco perché è NULL quindi. [Restituisce l'ultimo valore di identità inserito.] (Http://msdn.microsoft.com/en-us/library/ms187342.aspx) per la sessione. –

risposta

4

Non è necessario inserire @@ IDENTITY nella tabella nello scenario - si deve CREARE tavolo con IDENTITÀ campo come questo:

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

Questo viene copiato pari pari dal MSDN pagina @@IDENTITY: "Dopo un INSERT, SELECT INTO o l'istruzione di copia bulk completa, @@IDENTITY contiene l'ultimo valore di identità generato dall'istruzione. Se l'istruzione non ha influenzato alcuna tabella con colonne Identity, @@IDENTITY restituisce NULL. Se vengono inserite più righe, generando più valori di identità, @@ IDENTITY restituisce l'ultimo valore di identità generato. "(link) .Non so se sono necessarie ulteriori informazioni.

+0

sql messaggio: (1 riga (e) interessata) @@ IDENTITY = NULL; – AFetter

+2

@Coelho - Hai detto su un commento che la tua tabella non ha una colonna di identità, quindi '@@ IDENTITY' sarà' NULL' dopo il tuo inserimento – Lamak

+0

Spiacente, la tabella ha una chiave, EntityID è una chiave primaria. – AFetter

1

@@identity dà solo l'ultimo valore inserito . in un IDENTITY field

È necessario creare un IDENTITY field invece :)

Problemi correlati