web-dev-qa-db-ja.com

SQLプロファイラーのデータベース名とデータベースIDに何も表示されないのはなぜですか?

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)

3
jerry xu

トレースが実際にこれらの列を収集していることを確認します。次のクエリは、各トレース(デフォルトのシステムトレースを除く)でキャプチャされるイベントと列を表示します。

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║
╚═════════╩═════════════════╩════ ═════════╩═════════════════╩═════════╩══════════╝
1
Max Vernon