2015-01-21 4 views
0

Я хочу создать процедуру аудита, которая будет вызываться в блоке catch всей процедуры в моей базе данных.Как получить значения входных параметров хранимой процедуры

Я хотел сохранить список всех входных параметров и его значений в этой аудиторской БД.

Пожалуйста, предложите мне, как добиться этого в SQL Server

+0

Означает, что вы хотите выполнить одну процедуру в блоке catch всех процедур? –

+0

yes Krish Kvr, я ищу какую-то общую процедуру, которая будет вызываться из блока catch, и ввод процедуры может быть получен из некоторой системной процедуры –

ответ

0

Я не в курсе программно получения списка параметров и их значения хранимой процедуры (возможно, будет включать п число системных таблиц и тому подобные). Не вдаваясь в этот уровень сложности И, если изменить существующие процедуры, вы можете сделать что-то в строках ниже.

ALTER существующие сохраненные проки добавить небольшую функциональность, где вы заполнить табличную переменную с
параметров в формате набора струн ('@paramname = paramvalue') и их значения в текущем прок , а затем огонь Ревизионную прок, если контроль достигает блока CATCH.

--Add this code bit on top of the proc from where you want the Audit Proc to be fired 

--Declare and insert into a table variable 
Declare @ParamValues TABLE (params varchar(400)) 

insert into @ParamValues 
select '@id = '+ @id UNION 
select '@name = '+ @name UNION 
select '@date = '+ @date 

GO 

... 
.... 
END TRY 

begin catch --Auditing proc code below 
exec AuditDB.dbo.AuditProc @ParamValues, 
    OBJECT_NAME(@@PROCID) --this returns the name of current proc 
end catch 

------- 
-------Create the requisite SQL objects 
------- 
CREATE TABLE AuditDB.dbo.AuditTable 
(
    AuditMessage varchar(400), 
    ProcName varchar(200), 
    DateTimeStamp DateTime 
); 
GO 
CREATE TYPE AuditDB.dbo.ParamValuesType AS TABLE 
(
    params varchar(400) 
); 
GO 
CREATE PROCEDURE AuditDB.dbo.AuditProc 
    @ParamValues dbo.ParamValuesType READONLY 
    ,@ProcName varchar(200) 
AS 

BEGIN --Add whaterver lines of code required, this is just a basic version. 
    INSERT INTO AuditDB.dbo.AuditTable  
    SELECT params, @ProcName, cast(getdate() as datetime) FROM @ParamValues 
END; 
+0

спасибо sourav_Agasti за это предложение. Но здесь задача состоит в том, чтобы фиксировать информацию о переменной типа таблицы. Также будет много изменений кода, поскольку большинство процедур уже реализованы, и я пытаюсь разработать систему ведения журнала, которая может захватывать всю входную информацию для повторения проблемы. Пожалуйста, дайте мне знать, если у вас есть другой подход к продолжению –

Смежные вопросы