日期:2014-05-18 浏览次数:20568 次
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 個資料列受到影響)
*/