2016-08-16 21 views
-2

を挿入します。私はこの要求を持っている自動インクリメント

INSERT INTO E_COURR (ID_COURR, ID_TYPECOURRIEL, LL_COU_SUJET, TXT_COU_CONTENU) 
VALUES (isnull((select max(isnull(ID_COURR,0))+1 from E_COURR WITH (HOLDLOCK, UPDLOCK);), 1, 'some text....', 'some text....'); 
GO 

私は、このエラーメッセージがあります:あなたはID_COURRは、自動インクリメントはの世話をするような方法IDENTITYカラムとして宣言している必要があります

Msg 1046, Level 15 , State 1, Line 23 
Subqueries are not allowed in this context. Only scalar expressions are allowed . 
Msg 319, Level 15 , State 1, Line 23 
Incorrect syntax near the keyword ' with '. If the statement is a common table expression or XMLNAMESPACES clause, the previous statement must end with a semicolon. 
+0

否定投票をした人は、私が自分の投稿を改善できる理由を与えることができます。ありがとうございました – Mercer

答えて

4

これが不可能な場合は、最初に変数にIDを取得するだけです。

その後、

そして、私はあなたがほぼ確実にIDENTITY列

ボンのチャンスでテーブルを再作成する必要があります言うように価値

INSERT INTO E_COURR (ID_COURR, ID_TYPECOURRIEL, LL_COU_SUJET, TXT_COU_CONTENU) 
VALUES (@E_COURR, 1, 'some text....', 'some text....'); 

しかし、それを使用します!

2

としてはIDENTITYが自動的

DECLARE @tbl TABLE(ID INT NOT NULL IDENTITY, SomeValue INT); 
INSERT INTO @tbl(SomeValue) VALUES(100),(200),(300); 

SELECT * FROM @tbl; 

をこの問題を解決します。しかし、ちょうどあなたがこの道を行くことができない場合には、あなたがVALUESの代わりにSELECT以内にあなたのサブ選択を置くことができ、別の機会を提供するために使用する前に指摘しました:

DECLARE @tbl2 TABLE(ID INT NOT NULL, SomeValue INT); 
INSERT INTO @tbl2(ID,SomeValue) 
SELECT isnull((select max(ID) FROM @tbl2),0)+1,100; 
INSERT INTO @tbl2(ID,SomeValue) 
SELECT isnull((select max(ID) FROM @tbl2),0)+1,200; 
INSERT INTO @tbl2(ID,SomeValue) 
SELECT isnull((select max(ID) FROM @tbl2),0)+1,300; 

SELECT * FROM @tbl2; 
関連する問題