在sql中返回插入的记录的id
作者:亮亮 来源:亮亮博客 发布时间:2008-12-21 15:54:00
标签:存储过程,id,sql,数据库
若数据库是sql server,我以前为了返回插入记录的id,一般是用下面的存储过程:
程序代码
create procedure backId2
@t_txt1_v nvarchar(50),
@id int output
as
insert into testTbl(t_txt1) values(@t_txt1_v)
select @id=@@IDENTITY
go
可有一次却出现了问题,返回的结果老不正确,于是查了一下资料,用下面的存储过程是最保险的:
程序代码
create procedure backId1
@t_txt1_v nvarchar(50),
@id int output
as
insert into testTbl(t_txt1) values(@t_txt1_v)
select @id=SCOPE_IDENTITY()
go
为什么这么说呢?看查到的资料如下解释:
@@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。
SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值。
例如,有两个表 a1 和 a2,在 a1上定义了一个 Insert 触发器。当将某行插入 a1 时,触发器被激发,并在 a2 中插入一行。此例说明了两个作用域:一个是在 a1上的插入,另一个是作为触发器的结果在 a2上的插入,假设a1和a2 都有 IDENTITY 列。
@@IDENTITY 返回插入到当前会话中任何作用域内的最后一个 IDENTITY 列值,该值是插入a2中的值。
SCOPE_IDENTITY() 返回插入 a1 中的 IDENTITY 值,该值是发生在相同作用域中的最后一个 Insert。如果在作用域中发生插入语句到标识列之前唤醒调用 SCOPE_IDENTITY() 函数,则该函数将返回 NULL 值。
最后说说怎么调用存储过程吧!
程序代码
connstr=""
set conn=server.CreateObject("adodb.connection")
conn.open connstr
set cmd=server.CreateObject("adodb.command")
cmd.activeconnection=conn
cmd.commandtype=4
cmd.commandtext="backId1"
cmd.parameters.item("@t_txt1_v").value="procedure test"
cmd.execute
'maxId就是返回的id
maxId=cmd.parameters.item("@id").value
set cmd=nothing
conn.close
set conn=nothing
0
投稿
猜你喜欢
- 某些杀毒软件会把正常的asp文件误认为是asp木马文件,而自动删除,影响正常使用。下面方法可能会有效避免被杀毒软件删除把dim t
- SSI是英文Server Side Includes的缩写,翻译成中文就是服务器端包含的意思。从技术角度上说,SSI就是在HTML文件中,可
- 代码如下:<html> <head> &nb
- 介绍:细处着手,巧处用功。高手和菜鸟之间的差别就是:高手什么都知道,菜鸟知道一些。电脑小技巧收集最新奇招高招,让你轻松踏上高手之路。摘要:
- Windows客户端业务群产品营销主管斯蒂芬最近在向记者示范Internet Explorer 8 Beta2版浏览器的技术特征时标识,与用
- 个人网站如有会员注册模块+动网论坛的话,那网站要与动网论坛系统整合,实现不同Web系统之间的用户信息同步更新、登录等操作就不是件容易的事了,
- 下面都是我收集的一些比较常用的正则表达式,因为平常可能在表单验证的时候,用到的比较多。特发出来,让各位朋友共同使用。呵呵。匹配中文字符的正则
- 知识点: 函数 replicate 以下代码是实现如下功能: 代码如下:declare @sql varchar(200), --需填充的字
- 网页版面布局的方法及技巧,版面指的是浏览器看到的完整的一个页面(可以包含框架和层)。因为每个人的显示器分辨率不同,所以同一个页面的大小可能出
- 孤立帐户,就是某个数据库的帐户只有用户名而没有登录名,这样的用户在用户库的sysusers系统表中存在,而在master数据库的syslog
- 看了下传统的方法,觉得不好,太麻烦。自己重写了个,思路比较新。这个函数的优点是html代码可以很简洁,使用图片也可以很少,只需要两张图片。事
- 对于中小型个人、企业网站来说,MySQL数据库或许是目前数据库的最完美实施解决方案了。在不变更服务器硬件的前提下,一个经过良好架构,优化后的
- 回滚段管理一直是ORACLE数据库管理的一个难题,本文通过实例介绍ORACLE回滚段的概念,用法和规划及问题的解决。 回滚段概述 回滚段用于
- 上一课:ACCESS入门教程:窗口和菜单的使用向导简介 这一课我们要建立一个客户订单管理数据库,这个数据库将用ACCESS提供的数据库向导来
- 【ThinkPHP版本查询】dump(THINK_VERSION);模板获取get参数{$Think.get.pageNumber}或者$R
- 调用很简单 Readkid.motion.tween(target,duration, vars)target: 要缓动的DOM对象dura
- 社会上的任何人,都不愿意自己给人留下难以交往的印象,就算是那些冷漠、寡情的人他们也在不断地寻求一种通道,达到与他人的交流和沟通。如果,在你与
- 批量修改: EXEC sp_MSforeachtable 'exec sp_changeob
- 因为神奇的中文有时也是会遇到国外同学都不知道原因导致一些神奇滴问题,所以要用更神奇的英文来解决问题。Mac OS的一些:华文细黑:STHei
- 最近因项目需要用ACCESS做数据库开发WEB项目看论坛上还许多人问及ACCESS被注入的安全问题许多人解决的方法仍然是用Replace替换