【问题标题】:getting the autoincremnt value after inserting record using SQL Server使用 SQL Server 插入记录后获取 auto_increment 值
【发布时间】:2010-12-24 07:27:43
【问题描述】:

我正在使用连接到 SQL Server 数据库的 VB.NET 开发一个项目

在这个项目中,我需要在插入一条记录后获取名为“ID”的列的值 立即数据库。

谢谢。

【问题讨论】:

  • 您如何将信息保存到数据库中。能否提供代码示例?
  • 您使用什么作为 DAL? ADO/LINQ/等。

标签: sql-server auto-increment


【解决方案1】:
CREATE TABLE dbo.SomeTable (
     ID int IDENTITY
    ,[NAME] varchar(50)
    );
go

INSERT INTO dbo.SomeTable ([Name])
SELECT 'Joe' UNION
SELECT 'Jim' UNION
SELECT 'JIll'
;

SELECT  ident_current('dbo.SomeTable') AS [LastID_1]
        ,@@IDENTITY AS [LastID_2]
        ,scope_identity() AS [LastID_3]
;   

用途:

  • ident_current ('TableName') 用于特定表,不受范围和会话限制
  • @@IDENTITY 当前会话中的最后一个 ID
  • scope_identity() 当前会话中的最后一个 ID,当前范围

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:
      INSERT
          INTO [News]
          (
              LanguageID,
              Title,
              Short,
              [Full],
              Published,
              AllowComments,
              CreatedOn
          )
          VALUES
          (
              @LanguageID,
              @Title,
              @Short,
              @Full,
              @Published,
              @AllowComments,
              @CreatedOn
          )
      
          set @NewsID=@@identity
      

      【讨论】:

      • 您应该使用 scope_identity() 而不是 @@identity。如果插入时触发了任何触发器,@@identity 将不会保留您期望的值。
      【解决方案4】:

      SCOPE_IDENTITY、IDENT_CURRENT 和@@IDENTITY 是相似的函数,因为它们返回的值插入到标识列中。

      【讨论】:

        【解决方案5】:

        表格

        EMPID ( AUTOINCREAMENT)
        NAME VARCHAR(50)
        
        INSERT INTO TABLE ( NAME) VALUES ('RAMKUMAR')
        SELECT @@IDENTITY

        使用@@identity 返回自增值

        【讨论】:

          【解决方案6】:

          您可以创建临时表变量并创建一个名为 StuId 的列。

          --Student table creation
          CREATE TABLE [dbo].[StuTable](
              [StuId] [int] IDENTITY(1,1) NOT NULL,
              [StuName] [nvarchar](50) NOT NULL,
              [DOB] [date] NULL
          )
          
          DECLARE @TempTable TABLE(StuId INT)
          
          INSERT INTO [dbo].[StuTable]([StuName]
                                      ,[DOB])
          OUTPUT inserted.StuId INTO @TempTable
          VALUES ('Peter', '1979-01-01')
          
          SELECT StuId FROM @TempTable --Get the auto increment Id
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-11-04
            • 2015-05-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-04-11
            • 2016-06-02
            • 1970-01-01
            相关资源
            最近更新 更多