3

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

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

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

4

2 回答 2

1

你想做这样的事情吗?

<cfquery name="qryTest" datasource="#DSN#">
  INSERT 
  INTO users(fName, lName, City) 
  OUTPUT inserted.id 
  VALUES('Test1', 'Test2', 'Test3')
</cfquery>
于 2020-11-18T22:30:35.370 回答
1

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

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

我已经插入了两列数据,并且我的表 loginDetails 有 PK 和 Identitycol 选项。因此,虽然转储结果应该返回具有CACHED、EXECUTIONTIME、GENERATEDKEY、IDENTITYCOL、RECORDCOUNT 和 SQL的键和值的结构,如下图所示。 在此处输入图像描述

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

这里我的表 test2 我没有设置 Autoincrements ( Constraints ) 选项。所以它不会在结果结构中返回GENERATEDKEY,IDENTITYCOL 。就像我下图一样。 在此处输入图像描述

所以我建议请检查你的数据库,该表是否有适当的约束。

于 2020-11-19T14:46:16.553 回答