2012-01-16 19 views
5

INSERT SELECT kullandığımda @@ IDENTITY nasıl kullanılır?SQL insert select @@ Kimlik

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' aslında IDENTITY' (NB 'olarak tanımlanan herhangi bir sütun var mı oluşturmanız gerekir @ENTITYID neden burada null olduğunu açıklamıyor –

+0

hayır, sadece bir, EntityID - anahtar – AFetter

+0

İşte bu yüzden o zaman NULL. Oturumunuz için [son eklenen kimlik değerini döndürür.] (Http://msdn.microsoft.com/en-us/library/ms187342.aspx). –

cevap

4

Sen senaryoda tabloya KİMLİĞİNİ @@ eklemek gerekmez - Böyle masa KİMLİK ile alanını CREATE zorunda:

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

Bu MSDN'den aynen kopyalanır hakkında @@IDENTITY: "INSERT, SELECT INTO veya toplu kopyalama deyiminin tamamlanmasından sonra, @@IDENTITY ifadesi tarafından oluşturulan son kimlik değerini içerir. İfadenin kimlik sütunlarına sahip herhangi bir tabloyu etkilememesi durumunda, @@IDENTITY, NULL değerini döndürür. Birden çok satır eklendiyse, birden çok kimlik değeri oluşturuyorsa, @@ IDENTITY, oluşturulan son kimlik değerini döndürür. "(link). Daha fazla bilgiye ihtiyacınız olup olmadığını bilmiyorum.

+0

sql iletisi: (1 satır etkilendi) @@ IDENTITY = NULL; – AFetter

+2

@Coelho - Bir yorumunuzda, tablonuzun bir kimlik sütunu olmadığını, yani '@ IDENTITY' ifadesinin eklendikten sonra 'NULL' olacağını belirttiniz. – Lamak

+0

Üzgünüz, tabloda bir anahtar var, EntityID bir birincil anahtar. – AFetter

1

@@identity yalnızca son değeri ekler. .?% 99 zaman yine `SCOPE_IDENTITY` gerek ama olmamalı: bir IDENTITY field içinde

bir IDENTITY field yerine :)