sp_trace_generateevent (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

ユーザー定義イベントを作成します。 イベントは、SQL トレースまたは拡張イベントを使用して収集できます。

Note

このストアド プロシージャは 非推奨ではありません 。 他のすべての SQL トレース関連のストアド プロシージャは非推奨です。

Transact-SQL 構文表記規則

構文

sp_trace_generateevent
    [ @eventid = ] eventid
    [ , [ @userinfo = ] N'userinfo' ]
    [ , [ @userdata = ] userdata ]
[ ; ]

引数

[ @eventid = ] eventid

起動するイベントの ID。 @eventidは int で、既定値はありません。 ID は、次の範囲に8291含まれている必要があります。 この範囲は、ユーザー定義イベントを表します。 SQL トレースでは、sp_trace_seteventを使用してこの ID を持つイベントをトレースに追加し、このストアド プロシージャから発生した同じ ID のイベントをキャプチャします。

[ @userinfo = ] 'userinfo'

省略可能なユーザー定義文字列。 @userinfoは nvarchar(128) で、既定値は NULL.

[ @userdata = ] userdata

イベントの省略可能なユーザー定義データ。 @userdataは varbinary(8000) で、既定値は 0x.

リターン コードの値

次の表は、ストアド プロシージャの完了後にユーザーが取得できる戻りコード値を示しています。

リターン コード 説明
0 エラーなし。
1 不明なエラー。
3 指定されたイベントが無効です。 イベントが存在しないか、ストアド プロシージャに適したイベントではない可能性があります。
13 メモリが不足しています。 指定されたアクションを実行するのに十分なメモリがない場合に返されます。

解説

拡張イベントを使用してこのストアド プロシージャによって発生したイベントをキャプチャするには、イベント セッションにイベントを追加user_infoします。 詳細については、「CREATE EVENT Standard Edition SSION」を参照してください。 このイベントは user_info 、パラメーターに渡されたユーザー定義のイベント ID 値に @eventid 対して発生します。

ユーザー定義イベントの ID 番号のみを使用 sp_trace_generateeventできます。 他のイベント ID 番号が使用されている場合は、エラーが発生します。

このストアド プロシージャのパラメーターは厳密に型指定されます。 パラメーターに渡される値のデータ型が、その説明で指定されたパラメーター データ型と一致しない場合、ストアド プロシージャはエラーを返します。

sp_trace_generateevent は、拡張ストアド プロシージャによって以前に実行されたアクションの多くを xp_trace_* 実行します。 xp_trace_generate_event ではなく sp_trace_generateevent を使用します。

アクセス許可

SQL Server と Azure SQL Managed Instance では、アクセス許可が ALTER TRACE 必要です。 Azure SQL Database では、データベース ロールのメンバーシップが public 必要です。

次の例では、行がテーブルに挿入されるときに、ユーザー定義イベントを発生させます。 イベントには、テーブルに挿入されたデータが含まれます。

この例で発生したイベントを収集するには、 拡張イベント セッション を作成してイベントを user_info 含めるか 、SQL トレース を作成してイベントを UserConfigurable:0 含めます。

-- Create a table
DROP TABLE IF EXISTS dbo.user_defined_event_example;

CREATE TABLE dbo.user_defined_event_example
(
Id int IDENTITY(1,1) PRIMARY KEY,
Data nvarchar(60) NOT NULL
);

DROP TRIGGER IF EXISTS fire_user_defined_event;
GO

-- Create an insert trigger on the table
CREATE TRIGGER fire_user_defined_event ON dbo.user_defined_event_example
FOR INSERT
AS
DECLARE @EventData varbinary(8000);

-- Convert inserted rows to JSON and cast it as a binary value
SELECT @EventData = CAST((
                         SELECT Id, Data
                         FROM inserted
                         FOR JSON AUTO
                         ) AS varbinary(8000));

-- Fire the event with the payload carrying inserted rows as JSON
EXEC dbo.sp_trace_generateevent
    @eventid = 82,
    @userinfo = N'Inserted rows into dbo.user_defined_event_example',
    @userdata = @EventData;
GO

-- Insert a row into the table. The trigger fires the event.
INSERT INTO dbo.user_defined_event_example (Data)
VALUES (N'Example data');

-- Copy the binary payload from the event and cast it to a string with the JSON value
SELECT CAST(0x5B007B0022004900640022003A0031002C002200440061007400610022003A0022004500780061006D0070006C0065002000640061007400610022007D005D00 AS nvarchar(max));
-- This returns: [{"Id":1,"Data":"Example data"}]