2012-01-16 29 views
5

Cách sử dụng @@ IDENTITY khi tôi sử dụng INSERT SELECT?Chèn SQL chọn @@ 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

Liệu 'Quiz_QuizQuestion' thực sự có bất kỳ cột định nghĩa là 'IDENTITY' (NB: 99% thời gian bạn cần' SCOPE_IDENTITY' anyway nhưng shouldn 't giải thích lý do tại sao '@ENTITYID IS NULL' ở đây) –

+0

không, chỉ một, EntityID - khóa – AFetter

+0

Đó là lý do tại sao là NULL rồi. Nó [trả về giá trị nhận dạng được chèn vào cuối cùng.] (Http://msdn.microsoft.com/en-us/library/ms187342.aspx) cho phiên của bạn. –

Trả lời

4

Bạn không cần phải chèn @@ IDENTITY vào bảng trong kịch bản của bạn - bạn phải CREATE bảng với SẮC lĩnh vực như thế này:

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

này được sao chép nguyên văn từ MSDN trang về @@IDENTITY: "Sau khi INSERT, SELECT INTO hoặc bản sao kê bản sao hoàn thành, @@IDENTITY chứa giá trị nhận dạng cuối cùng được tạo ra bởi tuyên bố. Nếu tuyên bố không ảnh hưởng đến bất kỳ bảng nào có cột nhận dạng, @@IDENTITY trả về NULL. Nếu nhiều hàng được chèn vào, tạo ra nhiều giá trị nhận dạng, @@ IDENTITY trả về giá trị nhận dạng cuối cùng được tạo. "(link). Tôi không biết bạn có cần thêm thông tin hay không.

+0

thông điệp sql: (1 hàng) bị ảnh hưởng) @@ IDENTITY = NULL; – AFetter

+2

@Coelho - Bạn đã nói trên một nhận xét rằng bảng của bạn không có cột nhận dạng, vì vậy '@@ IDENTITY' sẽ là' NULL' sau khi bạn chèn – Lamak

+0

Xin lỗi, bảng có khóa, EntityID là khóa chính. – AFetter

1

@@identity chỉ cung cấp giá trị cuối cùng được chèn . trong một IDENTITY field

bạn cần phải tạo một IDENTITY field thay :)

Các vấn đề liên quan