Как мне записать детали вызовов хранимых процедур? - PullRequest
0 голосов
/ 17 января 2020

В моем текущем проекте мы сталкиваемся с проблемами, которые могут быть очень легко отлажены (в нашей среде разработки), зная, что выполняются вызовы, вместе с их соответствующими параметрами. Чтобы добиться этого, я создал таблицу, в которой хранится имя PRO C, а также произвольный BLOB-объект JSON, содержащий все параметры, с которыми он вызывался. Я также храню время звонка, но это не имеет значения.

Ниже приведен единственный способ заполнения этой таблицы:

    DECLARE @prmJson NVARCHAR(MAX) = (  SELECT * FROM (VALUES       
            ('@userId'              ,   @userId                )
        ,   ('@baiCodeMerchantId'   ,   @baiCodeMerchantId     )
        ,   ('@baiCodeMerchantType' ,   @baiCodeMerchantType   )
        ,   ('@appliedAccountId'    ,   @appliedAccountId      )
        ,   ('@unappliedAccountId'  ,   @unappliedAccountId    )) AS P(Name, Value) FOR JSON AUTO);
    INSERT INTO History.SprocCallRecords ([SprocName], [ParametersJson])
    VALUES (QUOTENAME(OBJECT_NAME(@@PROCID)), @prmJson);

Моя проблема в том, что это много код для добавления к каждой отдельной процедуре . Я предпочел бы поразмышлять над значениями в области или вызвать какой-нибудь C# -подобный метод nameof (). Хотя я, очевидно, проецирую другие языки на t SQL, я бы очень хотел упростить этот шаблон, прежде чем интегрировать его где-либо.

В основном я ищу предложения, но не так много Мне удалось найти в Google RE: именно это.

Заранее спасибо за любую помощь!

1 Ответ

0 голосов
/ 21 января 2020

Вы можете вызывать хранимые процедуры динамически, чтобы вы могли сохранять каждый вызов в какой-либо таблице журнала.

Пример:

    DECLARE 
    @param1 nvarchar(50),
    @param2 nvarchar(50),
    @param3 nvarchar(50)

SET @param1 = 'value of param 1'
SET @param2 = 'value of param 2'
SET @param3 = 'value of param 3'

DECLARE @sp_text nvarchar(2000)
SET @sp_text = 'exec some_sp ''' + @param1 + ''', ''' + @param2 + ''', ''' + @param3 + ''''

INSERT INTO Executions_Log_Table(Execution_DT, SP_Call) SELECT GetDate(), @sp_text
EXEC(@sp_text)

Надеюсь, что вам поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...