запись подробной информации в файл в SQL Server - PullRequest
1 голос
/ 06 сентября 2011

Есть ли у кого-нибудь код, который бы просто записывал некоторую подробную информацию в файл в запросе SQL (или хранимой процедуре или триггере)?Я не ищу ничего необычного.Все, что я хочу сделать, это быстро поместить отладочную информацию в мой SQL, так же, как это делают люди для отладки JavaScript с помощью предупреждений.Я смотрел на использование Lumigent, но это кажется излишним для того, что я хочу сделать.Мне все равно, в каком формате ведется регистрация. Ниже приведен простой пример того, что я хотел бы сделать.

Пример:

DECLARE @x int;
SET @x = '123'
-- log the value of @x

============

9/6/2011 @ 4:01 pm update

Я попробовал sqlcmd ниже, который работает хорошо.Но это не работает, когда в хранимой процедуре есть 100 параметров, когда я хочу отладить.В этом случае мне нужно поставить точку останова в моем клиентском коде, а затем получить значение каждого аргумента.Затем перейдите и введите команду exec, а затем посмотрите на выходной файл.Все, что я хочу сделать, это вставить одну простую строку кода в мой SQL (возможно, вызов другой хранимой процедуры, если она занимает более одной строки кода), которая записывает значение переменной в файл.Вот и все.Я просто использую это для отладки.

Ответы [ 2 ]

2 голосов
/ 06 сентября 2011

Один довольно простой способ - использовать OSQL или SQLCMD для запуска вашей процедуры.Это методы командной строки для выполнения команд / процедур / сценариев SQL.

С помощью этих утилит вы можете направить вывод (который обычно отображается на вкладке «Сообщения» в SSMS) в текстовый файл.

Если вы сделаете это, в вашем примере код будет:

DECLARE @x int;
SET @x = '123'
PRINT @x

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

0 голосов
/ 07 сентября 2011

Теперь, имея больше информации, думаю, я смогу продвинуть свой комментарий к ответу:

Почему это должен быть файл? Если это только во время отладки, вы не можете так же легко войти в таблицу, и когда вы хотите увидеть последние результаты:

SELECT TOP (n) module, parameters, etc. 
    FROM logTable 
    ORDER BY DateCreated DESC;

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

Это выглядит гораздо менее хлопотно, чем использование архаичного подхода, основанного на файлах. Вы уже используете базу данных, воспользуйтесь преимуществом!

Если вы решили использовать файл по какой-либо причине (это может помочь понять или противостоять, если вы перечислите эти причины), то следующим лучшим вариантом, вероятно, будет CLR, как уже упоминалось. Полное решение в этом случае может оказаться за рамками этого единственного вопроса, но в Интернете есть множество примеров.

...