SQL Server 2008 R2 Profiler を使用して、ColdFusion 7 アプリケーション (他の誰かが開発したもの) の問題をデバッグしています。これは、SQL Server 2008 R2 をバックエンドとして Windows 7 で実行しています。このアプリケーションは、もともと 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
更新 もともとアプリは CF 7 で開発されましたが、CF 7 は後で CF9 にアップグレードされ、現在は CF 11 を搭載したローカル マシンでデバッグしています。CF 7 が置き換えられたときにコードもアップグレードされたかどうかはわかりません。 CF 8、そしてCF 9で。プロファイラーで上記のSQLを生成すると思われるCFqueryは次のようになります。さらに、テーブル ProductItems には ID 列があり、データベースはトリガーを使用しておらず、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>