2012-01-16 57 views
5

如何在使用INSERT SELECT時使用@@ IDENTITY?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') – 2012-01-16 13:02:17

+0

不,只有一個,EntityID - 密鑰 – AFetter 2012-01-16 13:03:38

+0

那麼這就是爲什麼它然後是NULL。它[返回最後插入的身份值。](http://msdn.microsoft.com/zh-cn/library/ms187342.aspx)用於會話。 – 2012-01-16 13:04:25

回答

4

你不必插入@@ IDENTITY到表中您的方案 - 你必須CREATEIDENTITY場這樣的:

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: 「在INSERTSELECT INTO或大容量複製語句完成後,@@IDENTITY包含該語句生成的最後一個標識值。如果聲明不影響任何帶有標識列的表,@@IDENTITY返回NULL。如果多行插入,產生多個標識值,@@ IDENTITY返回最後產生的標識值。」(link)。我不知道,如果你需要更多的信息。

+0

sql消息:(1 row(s)affected) @@ IDENTITY = NULL; – AFetter 2012-01-16 14:36:41

+2

@Coelho - 您對評論表示您的表沒有標識列,因此在您插入後,@ @ IDENTITY將爲'NULL' – Lamak 2012-01-16 15:06:50

+0

對不起,表中有一個鍵,EntityID是主鍵。 – AFetter 2012-01-16 17:10:06

1

@@identity只給插入的最後一個值。在IDENTITY field

你需要創建一個IDENTITY field代替:)