Со следующей таблицей:
CREATE TABLE [Test]
(
[Id] BIGINT IDENTITY NOT NULL,
[Name] CHARACTER VARYING(255) NOT NULL,
[Description] CHARACTER VARYING(MAX) NOT NULL,
PRIMARY KEY([Id])
);
Я контролирую создание новых записей с помощью хранимой процедуры:
CREATE PROCEDURE [Test_Create]
@SessionId BINARY(32),
@Name CHARACTER VARYING(255),
@Description CHARACTER VARYING(MAX)
AS
BEGIN
BEGIN TRANSACTION;
BEGIN TRY
INSERT INTO [Test] ([Name], [Description])
VALUES (@Name, @Description);
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION;
THROW;
END CATCH
COMMIT TRANSACTION;
END
У меня есть триггер, который просто регистрирует значения до и после для этой таблицы для всех изменений. Когда вызывается моя хранимая процедура, этот триггер срабатывает и регистрируется в другой таблице. Однако мой триггер, очевидно, не может иметь переменную @SessionId
для регистрации сеанса пользователя веб-сайта, вызвавшего вызов хранимой процедуры клиентом SQL, работающим на веб-сервере. Я не хочу использовать SET CONTEXT_INFO
, потому что он нестабилен с пулом соединений и планами параллельного выполнения.
Тем не менее, я думал, что смогу сопоставить @SessionId
, переданное в хранимую процедуру, со значением @@SPID
, но опять же, это немного сложно с пулом соединений. Насколько я понимаю, это не сработает.
Как я могу отследить, какой пользователь на моем веб-сайте, предполагая, что у меня есть уникальный номер сеанса для них, переданный в мою хранимую процедуру, вызвал определенные изменения в любой из моих таблиц?
Если они вызывают хранимую процедуру, мне нужно знать вызываемую хранимую процедуру и то, как она изменила таблицы (до и после значений).
Возможно, существует альтернатива извлечению следующей информации и связыванию их вместе для создания контрольного журнала?
- Пользователь/сеанс веб-сайта, вызвавший вызов хранимой процедуры.
- Вызванная хранимая процедура и ее параметры
- Результирующие запросы данных
- Эффекты запросов (до и после данных)
Test_Create
? - person David   schedule 30.04.2014@SessionId
из контекста хранимой процедуры с@@SPID
из контекста триггера. - person Michael J. Gray   schedule 30.04.2014