写了一个存储过程
insert into Table (...A...) values(..B...)
select @@Identity
B是对应A的值,A是int型,B是从0到4到值,结果应该是返回插入行的索引值,该索引值递增
但执行起来很奇怪,当插入B为4时返回正常,但当插入0到3时,返回值比真实值小了,大家有没有试过这个问题,请指教
insert into Table (...A...) values(..B...)
select @@Identity
B是对应A的值,A是int型,B是从0到4到值,结果应该是返回插入行的索引值,该索引值递增
但执行起来很奇怪,当插入B为4时返回正常,但当插入0到3时,返回值比真实值小了,大家有没有试过这个问题,请指教
写了一个存储过程S执行插入操作,然后返回插入记录的A,我采用了返回 @@Identity的方法,本来应该是可以的,以前也试过,但这次很奇怪,插入B为4时,返回了A,结果正确 ,但插入b不为4时,返回值不是A,小于A
这样的解释应该比较清楚了吧
@@Identity不就是返回插入记录的主键吗
在完成 INSERT、SELECT INTO 或大量複製陳述式之後,@@IDENTITY 會包含該陳述式所產生的最後一個識別值。
是什么意思哟!自增长跟你其他字段插入的值无关的select ident_current('table_name') 返回为任何会话和任何作用域中的指定表最后生成的标识值
select @@IDENTITY 返回最后插入的标识值。
IDENT_CURRENT 會傳回任何工作階段和範圍中,指定資料表所產生的最後識別值。@@IDENTITY 會傳回所有範圍的目前工作階段中,任何資料表所產生的最後一個識別值。SCOPE_IDENTITY 會傳回在目前工作階段以及目前範圍中,任何資料表產生的最後一個識別值。
[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
因为ApplyId设为主健加递增,因此返回的@@Identity应该就是ApplyId的值吧,对吗