Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Логирование вызов хранимок с параметрами  [new]
hnkovr
Member

Откуда:
Сообщений: 214
SQL Server 2008 R2

Есть задача логировать вызовы всех хранимок.
Сделал так:
CREATE PROC sp_Proc
as
	DECLARE @PROCID int = @@PROCID
	EXEC dbo.SPExecutionLog_Insert @PROCID= @PROCID


Как бы при этом ещё логировать и значения всех входных параметров вызова хранимки?
Желательно что-нибудь универсальное, в идеале - одинаковый код для всех случаев.
Т.е. не что-то типа
CREATE PROC sp_Proc
			@par1	int
as
	DECLARE @PROCID int = @@PROCID
	EXEC dbo.SPExecutionLog_Insert @PROCID= @PROCID
				,@par1name	= '@par1'
				,@par1value	= @par1
23 апр 13, 14:55    [14218915]     Ответить | Цитировать Сообщить модератору
 Re: Логирование вызов хранимок с параметрами  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
select @param1, @param2, @param3... for xml...
23 апр 13, 14:57    [14218932]     Ответить | Цитировать Сообщить модератору
 Re: Логирование вызов хранимок с параметрами  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
hnkovr,
можно создать трассировку нужных событий
23 апр 13, 15:00    [14218951]     Ответить | Цитировать Сообщить модератору
 Re: Логирование вызов хранимок с параметрами  [new]
gang
Member

Откуда:
Сообщений: 1394
Shakill
hnkovr,
можно создать трассировку нужных событий

Трассировка ловит параметры только при RPC вызове.
23 апр 13, 15:15    [14219069]     Ответить | Цитировать Сообщить модератору
 Re: Логирование вызов хранимок с параметрами  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
gang
Shakill
hnkovr,
можно создать трассировку нужных событий

Трассировка ловит параметры только при RPC вызове.

а и правда. плохой совет
23 апр 13, 15:27    [14219164]     Ответить | Цитировать Сообщить модератору
 Re: Логирование вызов хранимок с параметрами  [new]
hnkovr
Member

Откуда:
Сообщений: 214
Трассировка не совсем подходит. Хотелось бы сделать код, который можно будет вызывать в любой хранимой процедуре.
Сейчас вызов хранимых процедур логируется одой строчкой, которая вставляется в начале процедуры.
Встала задача так же логировать параметры вызываемой процедуры.
Так как вызов процедуры логирования происходит в большом количестве процедур. Не хотелось бы в каждой перечислять параметры.
23 апр 13, 17:15    [14220153]     Ответить | Цитировать Сообщить модератору
 Re: Логирование вызов хранимок с параметрами  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
hnkovr
Так как вызов процедуры логирования происходит в большом количестве процедур. Не хотелось бы в каждой перечислять параметры.
Не хотелось бы, но придется.
23 апр 13, 17:22    [14220198]     Ответить | Цитировать Сообщить модератору
 Re: Логирование вызов хранимок с параметрами  [new]
Glory
Member

Откуда:
Сообщений: 104751
hnkovr
Не хотелось бы в каждой перечислять параметры.

К параметрам нельзя никак обратиться без указания имени.
23 апр 13, 17:26    [14220239]     Ответить | Цитировать Сообщить модератору
 Re: Логирование вызов хранимок с параметрами  [new]
hnkovr
Member

Откуда:
Сообщений: 214
Glory
hnkovr
Не хотелось бы в каждой перечислять параметры.

К параметрам нельзя никак обратиться без указания имени.


Вот если это действительно так, то жаль.
А то прямо ведь можно представить, что существует какая-нибудь системная функция получения контекста вызова хранимки, возвращающая, например, какой-нибудь xml, из которой можно получить в т.ч. и список параметров со значениями.
Неужели ничего подобного в SQL Server'е нет и не планируется?
С другой стороны - понятно, нужно это для узкоспециализированных задач...

А если и с помощью трассировки - можно ли получить из самой процедуры доступ к записям в трейсе её же вызова? И о какой трассировке идет речь? Profiler, extended events или что-то другое?
23 апр 13, 18:00    [14220518]     Ответить | Цитировать Сообщить модератору
 Re: Логирование вызов хранимок с параметрами  [new]
AnaceH
Member

Откуда:
Сообщений: 109
hnkovr
Не хотелось бы в каждой перечислять параметры.

1. C помощью процедуры sp_procedure_params_rowset пишете скрипт, который генерит для каждой процедуры шаблонный скрипт, который берет все параметры процедуры и преобразует их к xml. (select @param1, @param2, @param3... for xml...)
2. Пишете скрипт, который сгенеренный в предыдущем пункте скрипт вставляет в начало соответствующей процедуры, а потом ее альтерит.
23 апр 13, 18:54    [14220824]     Ответить | Цитировать Сообщить модератору
 Re: Логирование вызов хранимок с параметрами  [new]
hnkovr
Member

Откуда:
Сообщений: 214
AnaceH,

Да, единственное подобное решение мне и приходило в голову, только с помощью sys.params (cпасибо за sp_procedure_params_rowset). Видимо, придется на нем и остановиться.

Спасибо!
24 апр 13, 10:34    [14222390]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить