Sql 为什么SELECT SCOPE_IDENTITY()返回null?

Sql 为什么SELECT SCOPE_IDENTITY()返回null?,sql,sql-server,vba,Sql,Sql Server,Vba,在什么情况下选择SCOPE\u IDENTITY()返回null 我正在这样做: Set rs = cn.Execute("SELECT SCOPE_IDENTITY()", , adCmdText) capture_id = rs.Fields(0) 我得到的capture\u id=null根据“如果在作用域中的标识列中出现任何INSERT语句之前调用该函数,则作用域标识()函数将返回null值。”更具体地说,是作用域标识()仅返回在与scope_identity()调用相同的作用域内生成

在什么情况下
选择SCOPE\u IDENTITY()
返回null

我正在这样做:

Set rs = cn.Execute("SELECT SCOPE_IDENTITY()", , adCmdText)
capture_id = rs.Fields(0)

我得到的
capture\u id=null

根据“如果在作用域中的标识列中出现任何INSERT语句之前调用该函数,则作用域标识()函数将返回null值。”

更具体地说,是作用域标识()仅返回在与scope_identity()调用相同的作用域内生成的最新标识值。在您发布的示例中,SCOPE_IDENTITY()调用是批处理中的唯一语句(因此是当前作用域中的唯一语句),因此它将返回null。如果要获取为特定表生成的最新标识值,请尝试IDENT_CURRENT('tablename')。这不受作用域的限制,它只提供为给定表生成的最新标识值。

好,所以您没有说解决方案是什么……如何将其保持在作用域内。我也有同样的问题,我尝试插入一个临时表变量,并在insert语句结束后检查该行的标识,结果为null。那么,如何在insert中保持它的作用域呢?很抱歉,我之前没有看到您的评论,但既然我在这里,我想我可能会为后代做出回应:)您需要将scope_IDENTITY()调用与insert语句放在同一批中。要么将所有代码放入存储过程并调用proc,要么将所有语句放入一个临时批处理并执行一次。