次の方法で共有


sp_trace_generateevent (Transact-SQL)

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance

ユーザー定義イベントを作成します。 イベントは、 SQL Trace または Extended Events を使用して収集できます。

Note

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

Transact-SQL 構文表記規則

構文

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

引数

[ @eventid = ] eventid

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

[ @userinfo = ] 'userinfo'

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

[ @userdata = ] userdata

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

リターン コードの値

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

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

解説

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

sp_trace_generateeventで使用できるのは、ユーザー定義イベントの ID 番号のみです。 他のイベント 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"}]