当前位置:  开发笔记 > 编程语言 > 正文

从MS SQL Server获取自动编号主键

如何解决《从MSSQLServer获取自动编号主键》经验,为你挑选了1个好方法。

我目前正在使用C#,我需要在一个表中插入一条新记录,获取新的主键值,然后在插入多个记录时将其用作外键引用.数据库是MS SQL Server 2003.所有帮助表示赞赏!



1> Greg Beech..:

获取插入行的标识的方法是使用该SCOPE_IDENTITY()函数.如果您正在使用存储过程,那么这将类似于以下内容将行标识作为输出参数返回.

CREATE PROCEDURE dbo.MyProcedure
(
    @RowId INT = NULL OUTPUT
)
AS

INSERT INTO MyTable
(
    Column1
    ,Column2
    ,...
)
VALUES
(
    @Param1
    ,@Param2
    ,...
);

SET @RowId = SCOPE_IDENTITY();

然后,您可以将此值用于任何后续插入(或者,如果您可以将数据全部传递到存储过程中,则可以在过程体的其余部分中使用它).

如果你动态地传递SQL,那么你使用相同的技术,但是使用带有语句分隔符的单个字符串(也在;SQL中),例如:

var sql = "INSERT INTO MyTable (Column1, Column2, ...) VALUES (@P1, @P2, ...);" +
          "SELECT SCOPE_IDENTITY();";

然后,如果你使用你执行此操作,ExecuteScalar你将能够将标识作为标量结果返回并将其转换为正确的类型.或者,您可以一次性构建整批产品,例如

var sql = "DECLARE @RowId INT;" + 
          "INSERT INTO MyTable (Column1, Column2, ...) VALUES (@P1, @P2, ...);" +
          "SET @RowId = SCOPE_IDENTITY();" +
          "INSERT INTO MyOtherTable (Column1, ...) VALUES (@P3, @P4, ...);";

这可能不是完全正确的语法,你可能需要SET NOCOUNT ON;在开始时使用(我的头脑生锈,因为我很少使用动态SQL),但它应该让你走上正确的轨道.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有