SQL Server Profiler 显示 SCOPE_IDENTITY() 而 ColdFusion 代码未在任何查询中使用它

SQL Server Profiler showing SCOPE_IDENTITY() while ColdFusion code is not using it in any query

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

更新 虽然最初该应用程序是在 CF 7 中开发的,但后来 CF 7 升级到 CF9,现在我在具有 CF 11 的本地机器上调试它。我不知道当 CF 7 替换为 CF 时代码是否也升级了8 然后是 CF 9。 似乎在探查器中生成上述 SQL 的 CFquery 看起来像。此外,table 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>

我猜是 CF 服务器自动添加了它。我知道您说过您使用的是 MX7,但是......回到 ColdFusion 8,引入了一项新功能,可以从简单的 INSERT 语句中检索生成的 ID。在 SQL 服务器中,它是通过将 SELECT SCOPE_IDENTITY() 附加到 INSERT 查询来完成的。这在当时肯定会造成一些问题。详情请见:

注意: 实现可能在以后的版本中发生了变化。

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