首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

,关于插入时输出参数的有关问题

2012-08-13 
高手请进,关于插入时输出参数的问题insert into T output inserted.t1 into @a values(...这样的语句按理

高手请进,关于插入时输出参数的问题
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 OUTPUTset @sqlExec=N'insert into '+@strTN+'(aa,bb) output inserted.autoid into @vid VALUES(20,25)' exec sp_executesql @sqlExecset @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 tbgocreate 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 @sqlExecselect * from @autoid/*autoid------------------------------------1(1 個資料列受到影響)*/ 

热点排行