Select SCOPE_IDENTITY()失效问题

在尝试获取SQL插入操作后的新生成ID时,发现SCOPE_IDENTITY()返回为空。通过排查,发现是由于之前打开的记录集未关闭导致的问题。文章探讨了使用SCOPE_IDENTITY(), @@IDENTITY以及max(id)的风险和最佳实践。" 106325670,5462779,Node.js Path模块详解,"['Node.js', '文件路径', '操作系统接口']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天上午11点开始测试页面如下代码错误:
insql="insert into tg_shenqing(sq_from,sq_xmid,sq_hyid,sq_hyname,sq_qq,sq_email,sq_tel,sq_bmzyid,sq_suid,sq_beizhu,addtime,ip,sq_sh,sq_expertID,sq_expertName) values(2,'"&schid&"','"&meid&"','"&realname &"','"&qq&"','"&email&"','"&mobile&"','"&dpid&"','"&suid&"','"&beizhu&"','"&now()&"','"&getIP()&"',2,13,'桑老师')"
rconn.execute(insql)
set newidrs=rconn.execute("Select SCOPE_IDENTITY()")  '获取新ID
newid=newidrs(0)    'newsid为你表中的id
newidrs.close

怎么都获取不到刚插入的ID

自己才疏学浅,就只能上网查资料,各种资料有说用select @@IDENTITY有说最好不要分开写写在一起如:

insql="insert into tg_shenqing(sq_from,sq_xmid,sq_hyid,sq_hyname,sq_qq,sq_email,sq_tel,sq_bmzyid,sq_suid,sq_beizhu,addtime,ip,sq_sh,sq_expertID,sq_expertName) values(2,'"&schid&"','"&meid&"','"&realname &"','"&qq&"','"&email&"','"&mobile&"','"&dpid&"','"&suid&"','"&beizhu&"','"&now()&"','"&getIP()&"',2,13,'桑老师');Select SCOPE_IDENTITY()"

等等。

但是我一一尝试,都没有获取到最新ID,newid一直为空。本来也可以用max(sq_id)来获取的,但是由于其他页面有用这个获取的,而且max(sq_id)还有安全风险。

我只能自己慢慢实验,实验过程不再赘述。最后原因是因为我上面打开了一个记录集没有关闭导致的:

set temp = rconn.execute("select top 1 sq_id from tg_shenqing "&where)

Error updating database. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 不能将值 NULL 插入列 'ID',表 'ARDB_SJ.dbo.tSys_OperationLog';列不允许有 Null 值。INSERT 失败。 ### The error may involve com.zd.archives.admin.system.operationlog.TsysOperationlogMapper.insert-Inline ### The error occurred while setting parameters ### SQL: insert into TSYS_OPERATIONLOG (CUSER, CTIME, CPC, SPC, MEMO, OPTIME) values ( ?, ?, ?, ?, ?, ?) ### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 不能将值 NULL 插入列 'ID',表 'ARDB_SJ.dbo.tSys_OperationLog';列不允许有 Null 值。INSERT 失败。 ; SQL []; 不能将值 NULL 插入列 'ID',表 'ARDB_SJ.dbo.tSys_OperationLog';列不允许有 Null 值。INSERT 失败。; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 不能将值 NULL 插入列 'ID',表 'ARDB_SJ.dbo.tSys_OperationLog';列不允许有 Null 值。INSERT 失败。 at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:102) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446) at com.sun.proxy.$Proxy42.insert(Unknown Source) at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:278) at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:57)数据库升级之后一直报错
03-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值