日期:2014-05-18 浏览次数:20462 次
create table TB(id int identity(1,2),A varchar(10)) insert into TB select 'asdfas' select @@identity /* (1 行受影响) --------------------------------------- 1 (1 行受影响) */ drop table TB
------解决方案--------------------
declear @strTN varchar(30) --表名变量 declare @sqlExec nvarchar(500) declare @autoid varchar(100) declare @vid int OUTPUT set @sqlExec=N'insert into '+@strTN+'(aa,bb) output inserted.autoid into @vid VALUES(20,25)' exec sp_executesql @sqlExec set @vid=@@identity
------解决方案--------------------
其实只要使用@@identity即可,何必如此麻烦
------解决方案--------------------
--关于标识列几个函数的区别 --@@IDENTITY和SCOPE_IDENTITY和IDENT_CURRENT的区别 @@IDENTITY--是得到当前会话的所有作用域的最后插入的IDENTITY值。 SCOPE_IDENTITY--是得到当前会话的当前作用域的最后插入的IDENTITY值。 IDENT_CURRENT--是得到指定表的最后插入的IDENTITY值,与会话、作用域无关。 --一个会话,就是一个用户连接。 --一个作用域就是一个模块——存储过程、触发器、函数或批处理。 ========================================= --和标识有关的几个函数。 select ident_current('tablename')--标识当前值 select ident_incr('tablename')--标识增量 select ident_seed('tablename')--标识种子
------解决方案--------------------
if object_id('tb')is not null drop table tb go create table tb(autoid int identity,aa varchar(10),bb varchar(10)) declare @strTN varchar(30) --表名变量 set @strTN='tb' declare @sqlExec nvarchar(500) declare @autoid table(autoid varchar(100)) --假设表格有三列,分别是autoid(自动增长),aa int , bb int set @sqlExec=N'insert into '+@strTN+'(aa,bb) output inserted.autoid VALUES(20,25)' insert @autoid exec sp_executesql @sqlExec select * from @autoid /* autoid ------------------------------------ 1 (1 個資料列受到影響) */