SQL插入选择@@ Identity

时间:2012-01-16 12:59:39

标签: sql-server

使用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  

3 个答案:

答案 0 :(得分:4)

您无需在场景中的表格中插入@@ IDENTITY - 您必须使用 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 

答案 1 :(得分:2)

这是从@@IDENTITY的MSDN页面逐字复制的: “在INSERTSELECT INTO或批量复制语句完成后,@@IDENTITY包含语句生成的最后一个标识值。如果该语句不影响具有标识列的任何表@@IDENTITY返回NULL。如果插入多行,生成多个标识值,@@ IDENTITY将返回生成的最后一个标识值。“ (link)。我不知道你是否需要更多信息。

答案 2 :(得分:1)

@@identity仅提供IDENTITY field中插入的最后一个值。

您需要创建IDENTITY field而不是:)