Entity Frameworkを使用してSQL Serverのストアドプロシージャを呼び出すコードがあります。 SQLプロファイラーを実行し、それが呼び出しているデータベースでフィルター処理すると、プロファイラーが正しく呼び出しを示していることがわかります。
ただし、データベース名とデータベースID列は常に空です。なぜこの情報が表示されないのか知っていますか?
私はこのバージョンを使用しています:
Microsoft SQL Server 2008 R2(SP1)-10.50.2500.0(X64)Jun 17 2011 00:54:03 Copyright(c)Microsoft Corporation Standard Edition(64-bit)on Windows NT 6.1(Build 7601:Service Pack 1)
トレースが実際にこれらの列を収集していることを確認します。次のクエリは、各トレース(デフォルトのシステムトレースを除く)でキャプチャされるイベントと列を表示します。
SELECT TraceID = t.id
, TracePath = t.path
, EventName = te.name
, ColumnName = tc.name
FROM sys.traces t
CROSS APPLY sys.fn_trace_geteventinfo(t.id) ei
LEFT JOIN sys.trace_events te ON ei.eventid = te.trace_event_id
LEFT JOIN sys.trace_columns tc ON ei.columnid = tc.trace_column_id
WHERE t.id > 1 /* exlude the system trace */
ORDER BY t.id
, ei.columnid;
結果は次のようになります(トレースに定義したイベントと列によって異なります)。
╔═════════╦═════════════════╦═════════════╦═══════ ══════════╦═════════╦══════════╗ ║TraceID║TracePath║EventName║ColumnName║eventid║columnid║ ╠═════════╬═════════════════╬═════════════╬══ ═══════════════╬═════════╬══════════╣ ║2║C:\ temp\trc.trc║CursorClose║ApplicationName║78║10║ ║2║C:\ temp\trc.trc║CursorClose║SPID║78║12║ ║2║C:\ temp\trc.trc║CursorClose║EventSequence║78║51║ ╚═════════╩═════════════════╩════ ═════════╩═════════════════╩═════════╩══════════╝