1

C# + SQL Server ExecuteScalar() で最後に挿入された ID が返されない挿入された行の自動インクリメント ID を取得するための優れたソリューションを見つけました。したがって、私のクエリは次のようになります。

INSERT INTO dbo.YourTable(Col1, Col2, ..., ColN)   
OUTPUT Inserted.ID
VALUES(Val1, Val2, ..., ValN);

残念ながら、私は SQL Server 2000 を使用しており、この構文は使用できません。

同じ結果を得るためにそこで何を使用できますか?

4

2 に答える 2

2

Sql Server 2000 で @@IDENTITY を使用できます

ただし、(SCOPE_IDENTITY によって克服された) 制限に注意する必要があります。説明については、この記事を参照してください http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/

編集

MSDN http://msdn.microsoft.com/en-us/library/aa259185%28v=sql.80%29.aspxによると、SCOPE_IDENTITYSS2000 で利用できるため、代わりに使用することをお勧めします。

実行することで値を取得できますSET @<var> = SCOPE_IDENTITY()

このリンクhttp://www.mikesdotnetting.com/Article/54/Getting-the-identity-of-the-most-recently-added-recordには、使用方法の例がいくつかありますSCOPE_IDENTITY

于 2013-01-17T02:51:57.243 に答える
0

ms sql server 2000ではキーワードを使用できないため、私が取り組んでいる答えは、ストアドプロシージャを介して行を挿入することです。また、同じ理由でOUTPUT放棄し、 .insertedscope_identity

さて、それは次のようになります。

CREATE PROCEDURE [dbo].[InsertRow]      
    @pDate datetime,
    @pId int OUTPUT
AS  
BEGIN   
    SET NOCOUNT ON;

    INSERT INTO nl$RegisterRace ([Date],...)
    VALUES (@pDate,...);

    SET @pId = scope_identity();
END
于 2013-01-17T03:21:19.057 に答える