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

我工作的答案是通过存储过程插入行,因为OUTPUT关键字在 ms sql server 2000 中不可用。我也不得不出于inserted同样的原因放弃并使用scope_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 回答