Sql server SQL Server探查器显示作用域\标识(),而ColdFusion代码未在任何查询中使用它

Sql server SQL Server探查器显示作用域\标识(),而ColdFusion代码未在任何查询中使用它,sql-server,coldfusion,sql-server-2008-r2,sql-server-profiler,scope-identity,Sql Server,Coldfusion,Sql Server 2008 R2,Sql Server Profiler,Scope Identity,我正在使用SQL Server 2008 R2探查器调试ColdFusion 7应用程序(由其他人开发)上的一个问题,该应用程序在Windows 7上运行,SQL Server 2008 R2作为后端。该应用程序最初使用MS Access 2003作为后端,后来转换为SQL Server 2008 R2。探查器显示了以下使用SCOPE_IDENTITY()的SQL,但当我使用搜索实用程序搜索应用程序根目录时,没有文件在其SQL查询中的任何位置使用SCOPE_IDENTITY()函数。应用程序的S

我正在使用SQL Server 2008 R2探查器调试ColdFusion 7应用程序(由其他人开发)上的一个问题,该应用程序在Windows 7上运行,SQL Server 2008 R2作为后端。该应用程序最初使用MS Access 2003作为后端,后来转换为SQL Server 2008 R2。探查器显示了以下使用SCOPE_IDENTITY()的SQL,但当我使用搜索实用程序搜索应用程序根目录时,没有文件在其SQL查询中的任何位置使用SCOPE_IDENTITY()函数。应用程序的SQL Server数据库没有任何存储过程、视图、函数等。所有SQL查询都是ColdFusion文件中的嵌入式查询。在这里,探查器将获取SCOPE_IDENTITY()函数:

declare @p1 int
set @p1=11
exec sp_prepexec @p1 output,N'@P1 datetimeoffset,@P2 varchar(8000),@P3 int,@P4 varchar(8000)',N'insert into ProductItems (item_date , item_description, item_type)
values (
@P1 ,
@P2 ,
@P3 , 
) select SCOPE_IDENTITY()','2015-10-19 00:00:00 +00:00','Test description',1
select @p1
更新 虽然最初的应用程序是在CF7中开发的,但CF7后来升级到了CF9,现在我正在使用CF11的本地机器上调试它。我不知道当CF7被CF8取代,然后又被CF9取代时,代码是否也被升级了。 在探查器中似乎生成上述SQL的CFquery如下所示。此外,表ProductItems没有标识列,数据库没有使用任何触发器,CFquery标记没有使用结果属性:

<cfquery name="addProductItems" datasource="#dtsource#">
  insert into Productitems (item_date,item_description,item_type)  
  values (
    <cfqueryPARAM value = "#item_dat#" CFSQLType = "CF_SQL_TIMESTAMP" null="#item_dat eq '-1'#">,
    <cfqueryPARAM value = "#item_description#" CFSQLType = "CF_SQL_VARCHAR">,
    <cfqueryPARAM value = "#item_type#" CFSQLType = "CF_SQL_INTEGER">
    )
</cfquery>

插入Productitems(项目日期、项目描述、项目类型)
价值观(
,
,
)

我猜CF服务器会自动添加它。我知道你说你正在使用MX7,但是。。。在ColdFusion 8中,引入了一个新特性,可以从简单的
INSERT
语句中检索生成的ID。在SQL Server中,它是通过将
SELECT SCOPE\u IDENTITY()
附加到
INSERT
查询来完成的。这在当时确实造成了一些问题。有关详细信息,请参阅:

NB:在更高版本中,实现可能已更改


同样,查找具有
result
属性的
cfquery
标记<代码>结果是一个包含有关所执行查询的详细信息的结构。在CF8中,生成的记录ID在键
IDENTITYCOL
下返回。在以后的版本中,它还包含与数据库无关的版本,
GENERATEDKEY

这也是我的猜测@nam-查找具有
result
属性的
cfquery
标记。此结果有一个键
GENERATEDKEY
,CF存储插入的identity@beloitdavisja-是的。尽管如此,IIRC数据库不可知
生成的密钥在CF8中不存在。后来又加了。CF8,仅支持MySQL db的
GENERATED_KEY
(@nam-注意下划线)。不要忘了检查数据库中是否定义了任何触发器,因为这些触发器可以执行在CF代码搜索中看不到的SQL。但是,如上所述,存储过程调用看起来非常像预处理语句,在使用cfqueryparam时,您希望DB驱动程序为cfquery输出该语句,而在指定cfquery result属性后的CF8中,则希望使用SCOPE_IDENTITY()。奇怪的是,如果您仍然使用CF7.FWIW,那么CF 9中添加了
GENERATEDKEY
。@Leigh我添加了一个更新部分,回答了添加了有用注释的人提出的问题。上面插入的实际CF代码是什么?