2012-01-16 5 views
5

を選択しますか?SQL挿入@@私はINSERT SELECTを使用する場合、@@ IDENTITYを使用する方法アイデンティティ

あなたのシナリオでは、テーブルに@@ 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 'として定義された列を持っています作成する必要がありますここで@ENTITYIDがNULLである理由を説明してください) –

+0

いいえ、ただ一つ、EntityID - キー – AFetter

+0

次にNULLです。セッションの最後のID値を返します。](http://msdn.microsoft.com/en-us/library/ms187342.aspx) –

答えて

4

- このようなIDENTITYフィールドでテーブルを作成するには、持っているに:これはMSDNからそのままコピーされ

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

ページ@@IDENTITY: "INSERTSELECT INTO、またはバルクコピーステートメントが完了した後、@@IDENTITYにステートメントによって生成された最後のID値が含まれます文がID列@@IDENTITY戻りNULLを持つ任意のテーブルに影響を与えなかった場合。複数の行が挿入されて複数のID値が生成された場合、@@ IDENTITYは最後に生成されたID値を返します。」(link)より多くの情報が必要かどうかわかりません。

+0

SQLメッセージ:(影響を受ける1行) @@ IDENTITY = NULL; – AFetter

+2

@Coelhoは - IDENTITY' @@ 'NULL'あなたの挿入後 – Lamak

+0

申し訳ありませんが、テーブルがキーを持っていることになるあなたは、あなたのテーブルには、ID列を持っていないことをコメントにした、'ので、実体識別子が主キーです。 – AFetter

1

@@identity 。?時間の99%はあなたがとにかく `SCOPE_IDENTITY`を必要とするが、shouldn:IDENTITY field

あなたはIDENTITY field代わりに:)

関連する問題