,关于插入时输出参数的有关问题
高手请进,关于插入时输出参数的问题
insert into T output inserted.t1 into @a values(...
这样的语句按理说是没有问题的,现在是这样的,我的表格名称是个变量,因此语句只能写成:
declear @strTN varchar(30) --表名变量
declare @sqlExec nvarchar(500)
declare @autoid varchar(100)
--假设表格有三列,分别是autoid(自动增长),aa int , bb int
set @sqlExec=N'insert into '+@strTN+'(aa,bb) output inserted.autoid into @vid VALUES(20,25)'
exec sp_executesql @sqlExec,N'@vid varchar(100) OUTPUT',@AUTOID output
首先,编译是没有问题的,但这句话总是不能正常运行总是提示:必须声明表变量 "@vid"
高手帮帮忙哈,我就是想返回插入的当前行的autoid,有其他的方法也可以,不过表名一定要用变量。(当然,我是不想在插入后使用查询返回autoid,这样效率较低)
------解决方案--------------------
@@IDENTITY
------解决方案--------------------
insert into T output inserted.t1 into @a values(...
这样的语句按理说是没有问题的,现在是这样的,我的表格名称是个变量,因此语句只能写成:
declear @strTN varchar(30) --表名变量
declare @sqlExec nvarchar(500)
declare @autoid varchar(100)
--假设表格有三列,分别是autoid(自动增长),aa int , bb int
set @sqlExec=N'insert into '+@strTN+'(aa,bb) output inserted.autoid into @vid VALUES(20,25)'
exec sp_executesql @sqlExec,N'@vid varchar(100) OUTPUT',@AUTOID output
首先,编译是没有问题的,但这句话总是不能正常运行总是提示:必须声明表变量 "@vid"
高手帮帮忙哈,我就是想返回插入的当前行的autoid,有其他的方法也可以,不过表名一定要用变量。(当然,我是不想在插入后使用查询返回autoid,这样效率较低)
------解决方案--------------------
@@IDENTITY
------解决方案--------------------
- SQL code
create table TB(id int identity(1,2),A varchar(10)) insert into TB select 'asdfas' select @@identity /* (1 行受影响) --------------------------------------- 1 (1 行受影响) */ drop table TB
------解决方案--------------------
- SQL code
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即可,何必如此麻烦
------解决方案--------------------
- SQL code
--关于标识列几个函数的区别 --@@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')--标识种子
------解决方案--------------------
- SQL code
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 個資料列受到影響) */