Coldfusion 查询结果中缺少GENERATEDKEY

Coldfusion 查询结果中缺少GENERATEDKEY,coldfusion,coldfusion-2016,Coldfusion,Coldfusion 2016,我有一些代码使用了过去几年中cfquery标记的result属性生成的GENERATEDKEY。我最近注意到它不再是Result返回的结构的一部分 <cfquery name="qryTest" datasource="#DSN#" result="sResult"> INSERT INTO users(fName, lName, City) VALUES( 'Test1', 'Test2', 'Test3') &l

我有一些代码使用了过去几年中cfquery标记的result属性生成的GENERATEDKEY。我最近注意到它不再是Result返回的结构的一部分

<cfquery name="qryTest" datasource="#DSN#" result="sResult">
  INSERT INTO users(fName, lName, City) VALUES(
  'Test1', 'Test2', 'Test3')
</cfquery>
<cfdump var="#sResult#">

插入用户(fName、lName、City)值(
“Test1”、“Test2”、“Test3”)

我只得到缓存、执行时间、记录计数和SQL。环境是CF2016,SQL Server 2014

您正在尝试这样做吗

<cfquery name="qryTest" datasource="#DSN#">
  INSERT 
  INTO users(fName, lName, City) 
  OUTPUT inserted.id 
  VALUES('Test1', 'Test2', 'Test3')
</cfquery>

插入
进入用户(fName、lName、City)
插入的输出.id
值('Test1','Test2','Test3')

我只是浏览一下你的问题。我相信您的表(用户)没有任何约束-PK(主键)和IDENTITYCOL(自动递增)选项。这样它就不会在结果结构中返回任何IDENTITYCOL&GENERATEDKEY键。这里,

 <cfquery name="InsertData1" datasource="testmssql" result="test" >
     INSERT INTO loginDetails VALUES( 'xxx','yyy') 
 </cfquery>

插入loginDetails值('xxx','yyy'))
我已经插入了两列数据,并且我的表loginDetails具有PK和Identitycol选项。因此,在转储结果时,它应该返回结构,其中包含CACHED、EXECUTIONTIME、GENERATEDKEY、IDENTITYCOL、RECORDCOUNT和SQL的键值,如下图所示。


插入test2值('xxx','yyy'))
在我的表test2中,我没有设置自动增量(约束)选项。所以它不是返回结果结构中的GENERATEDKEY、IDENTITYCOL。喜欢我下面的图片。


因此,我建议您检查数据库端是否有适当的约束。

在数据源设置中有一个选项
禁用自动生成的密钥
禁用检索自动生成的密钥
。检查了吗?@rrk,没有,那里没有启用。所以谜团还在继续..您最近是否切换了JDBC驱动程序或数据源?因为CF依赖于,因此必须相应地实现。@CFML_开发者您可以交叉检查结构中的you have get IDENTITYCOL吗?严重问题-您是否关闭并再次打开了它?:-)问这个问题是因为几年前,我在一家网上商店的生产中遇到了类似的问题,其中CF/JDBC驱动程序/MSSQL的某些部分停止返回
结果。GENERATEDKEY
在它以前工作多年的地方,最近没有任何更改。我加入了一些备用代码,以另一种方式获取标识,因为我无法证明在高峰时间重新启动是合理的,但最终在CF服务重新启动+SQL Server重新启动后,原来的问题消失了,再也没有出现,所以我从一开始就没有发现是什么导致了它!实际上,真正的查询是upsert。因此,基于它是更新还是插入,它过去依赖于generatedkey。如果存在,这意味着这是一个插入,并据此进行。我知道OUTPUT子句,可以修改代码。但我只是想确定当前代码停止工作的原因。我相信generatedkey将始终为sql server insert返回。我想那不是真的。鉴于问题的第一段,我不同意。为什么,?可能它们不在IDENTITYCOL选项中。那一次我们应该面对同样的问题。因为他的结果键没有返回GENERATEDKEY,IDENTITYCOL。仅与自动增量选项相关。Nah。你的假设没有一个是真的。我不仅有一个PK,还有一个身份栏。事实上,它以前在同一个环境下工作过(直到4个月前,这是肯定的,但在那之后随时都可能停止工作)
<cfquery name="InsertData1" datasource="testmssql" result="test" >
   INSERT INTO test2 VALUES( 'xxx','yyy')
</cfquery>