sp_trace_generateevent (Transact-SQL)
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance
ユーザー定義イベントを作成します。 イベントは、 SQL Trace または Extended Events を使用して収集できます。
Note
このストアド プロシージャは非推奨。 他のすべての SQL トレース関連のストアド プロシージャは非推奨です。
構文
sp_trace_generateevent
[ @eventid = ] eventid
[ , [ @userinfo = ] N'userinfo' ]
[ , [ @userdata = ] userdata ]
[ ; ]
引数
[ @eventid = ] eventid
起動するイベントの ID。 @eventid は int で、既定値はありません。 ID は、 82
から 91
の範囲である必要があります。 この範囲は、ユーザー定義イベントを表します。 SQL トレースでは、 sp_trace_setevent を使用してこの ID を持つイベントをトレースに追加し、このストアド プロシージャから発生した同じ ID のイベントをキャプチャします。
[ @userinfo = ] 'userinfo'
省略可能なユーザー定義文字列。 @userinfo は nvarchar(128) で、既定値は NULL
です。
[ @userdata = ] userdata
イベントの省略可能なユーザー定義データ。 @userdata は varbinary(8000) で、既定値は 0x
です。
リターン コードの値
次の表では、ストアド プロシージャの完了後に取得できる戻りコード値について説明します。
リターン コード | 説明 |
---|---|
0 |
エラーなし。 |
1 |
不明なエラー。 |
3 |
指定されたイベントが無効です。 イベントが存在しないか、ストアド プロシージャに適したイベントではない可能性があります。 |
13 |
メモリが不足しています。 指定されたアクションを実行するのに十分なメモリがない場合に返されます。 |
解説
Extended Events を使用してこのストアド プロシージャによって発生したイベントをキャプチャするには、user_info
イベントをイベント セッションに追加します。 詳細については、「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"}]