写了一个存储过程
insert into Table (...A...) values(..B...)
select @@Identity
B是对应A的值,A是int型,B是从0到4到值,结果应该是返回插入行的索引值,该索引值递增
但执行起来很奇怪,当插入B为4时返回正常,但当插入0到3时,返回值比真实值小了,大家有没有试过这个问题,请指教

解决方案 »

  1.   

    举个例子吧,一张表Table 里面有多个字段,A是主健标志位,递增,B是另外一个普通的字段
    写了一个存储过程S执行插入操作,然后返回插入记录的A,我采用了返回 @@Identity的方法,本来应该是可以的,以前也试过,但这次很奇怪,插入B为4时,返回了A,结果正确 ,但插入b不为4时,返回值不是A,小于A
    这样的解释应该比较清楚了吧
    @@Identity不就是返回插入记录的主键吗
      

  2.   

    @@IDENTITY 傳回上次插入的識別值。
    在完成 INSERT、SELECT INTO 或大量複製陳述式之後,@@IDENTITY 會包含該陳述式所產生的最後一個識別值。
      

  3.   

    入B为4时,返回了A,结果正确 ,但插入b不为4时,返回值不是A,小于A
    是什么意思哟!自增长跟你其他字段插入的值无关的select ident_current('table_name') 返回为任何会话和任何作用域中的指定表最后生成的标识值
    select @@IDENTITY 返回最后插入的标识值。
      

  4.   

    你把存储过程,Table設計,貼出來看看,
      

  5.   

    你的自增標記不是插入的,所以跟@@indentity無關的...
      

  6.   

    試試下面3個,哪個是你要的..
    IDENT_CURRENT 會傳回任何工作階段和範圍中,指定資料表所產生的最後識別值。@@IDENTITY 會傳回所有範圍的目前工作階段中,任何資料表所產生的最後一個識別值。SCOPE_IDENTITY 會傳回在目前工作階段以及目前範圍中,任何資料表產生的最後一個識別值。 
      

  7.   

    表的结构:
    [ApplyId] [int] IDENTITY (1, 1) NOT NULL ,
    [EquipTypeCode] [int] NULL ,
    [EquipNameCode] [int] NULL ,
    [EquipCustomsCode] [char] (8) COLLATE Chinese_PRC_CI_AS NULL ,
    [ApplyNote] [nvarchar] (1000) COLLATE Chinese_PRC_CI_AS NULL ,
    [ApplyDept] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [ApplyOU] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [ApplySec] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [ApplyLogon_Name] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [ApplyDisplayName] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [ApplyDate] [datetime] NULL ,
    [ApplyPhone] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [FeedBackType] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
    [FeedBackNote] [char] (1000) COLLATE Chinese_PRC_CI_AS NULL ,
    [FBLogon_Name] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
    [FBDisplayName] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
    [FBDate] [datetime] NULL ,
    [SLTSection] [int] NULL ,
    [SolutionFlag] [int] NOT NULL ,
    [TroubleCodeStr] [nvarchar] (1000) COLLATE Chinese_PRC_CI_AS NULL ,
    [Sort] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
    [SLLogon_Name] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
    [SLDisplayName] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
    [SLDate] [datetime] NULL ,
    [UploadFile] [nvarchar] (1000) COLLATE Chinese_PRC_CI_AS NULL 
    主健是ApplyId
    存储过程:
    CREATE    PROCEDURE StoreANewApply @EquipTypeCode int,
    @EquipNameCode int,@EquipCustomsCode char(8),@ApplyNote nvarchar(1000),
    @ApplyDept nvarchar(50),@ApplySec nvarchar(50),@ApplyLogon_Name varchar(50),
    @ApplyDisplayName nvarchar(50),@SLTSection nvarchar(50),
    @TroubleCodeStr nvarchar(1000),@Sort char(1),@ApplyPhone varchar(50),@ApplyOU varchar(50),@UploadFile varchar(1000(100),@SolutionFlag int as
    declare @ApplyId int
    BEGIN TRANSACTION
    Insert into Apply(EquipTypeCode,EquipNameCode,EquipCustomsCode,
    ApplyNote,ApplyDept,ApplySec,ApplyLogon_Name,ApplyDisplayName,
    ApplyDate,ApplyPhone,SolutionFlag,SLTSection,TroubleCodeStr,Sort,ApplyOU,FeedBackType,UploadFile)
    Values (@EquipTypeCode ,@EquipNameCode ,@EquipCustomsCode,
      @ApplyNote ,@ApplyDept ,@ApplySec ,@ApplyLogon_Name ,
    @ApplyDisplayName ,getdate(),@ApplyPhone,@SolutionFlag,@SLTSection ,@TroubleCodeStr ,'0',@ApplyOU,'3',@UploadFile)
        select @@IdentityCOMMIT TRANSACTION
    GO
      

  8.   

    问题出在SolutionFlag上,输入4的话返回标识值ApplyId正确,输入其他的就不正确了
    因为ApplyId设为主健加递增,因此返回的@@Identity应该就是ApplyId的值吧,对吗
      

  9.   

    找到解决方法了,用scope_identity()这个函数就可以了,谢谢大家的帮忙