Вопрос по sql-server, sql, sql-server-2008 – Как сохранить вывод MSSQL PRINT в переменную

1

На MS SQL 2008 R2 я хочу иметь возможность перехватывать вывод сообщений в переменную. Мне нужно запустить скрипт на многих базах данных. Поймать вывод сообщений (сообщения из печати или raiserror) и записать его в таблицу. Мне нужно сделать это из хранимой процедуры.

Для этого сценария

<code>Declare @sqlscript nvarchar(500)

Set @sqlscript = 
'select * from sys.objects
raiserror (''My raised error'', 10,1)
select * from sys.schemas
print ''my print'''

EXEC sp_executesql @sqlscript
</code>

Я хотел бы получить

<code>My raised error    
my print
</code>

ил

<code>(60 row(s) affected)  
My raised error

(21 row(s) affected)  
my print
</code>

Обновит
Я решил пойти с предложением @rs. Вход в таблицу - самый простой способ для меня. Использование SP для регистрации (для поддержания чистоты кода), а также небольшое регулярное выражение для рефакторинга всех моих скриптов. Решение будет готово к завтрашнему дню. Большое спасибо

@ rs: Вы должны сделать ответ со своим комментарием, чтобы он мог принять его. Gilles
После sp_executesql значения @@ error и @@ rowcount равны 0, потому что последний оператор - это печать. Он даст мне только информацию о последнем утверждении, а не весь выполненный скрипт. Alexandre Rondeau
Можете ли вы использовать вставку в таблицу вместо печати? Заменитьprint 'my print' сinsert into logtable (msg) values ('print') rs.
чек@@error, @@rowcount после вашего заявления Exec:SELECT @@rowcount rs.
Да, я мог бы заменить отпечатки журнальной таблицей или переменной nvarchar (max), которую я бы добавил. Но у меня есть около 75 сценариев, которые я бы не хотел подвергать рефакторингу. : D Плюс использование Print является своего рода стандартом для трассировки. Я могу изменить свои привычки, это команда, которая будет более неохотно меняться. Alexandre Rondeau

Ваш Ответ

1   ответ
2

http: //blogs.msdn.com/b/mattm/archive/2007/09/13/capture-print-messages-from-a-stored-procedure.asp

Но лучший вариант - это, вероятно, EXEC во временную таблицу, в которой просто есть один столбец varchar:

http: //msdn.microsoft.com/en-us/library/aa175921%28v=sql.80%29.asp

CLR - это просто не вариант, мы размещены на сервере, который не предоставляет нам правильные учетные данные для использования CLR и опцию EXEC. Я только что протестировал его, но не могу заставить его работать. Я могу получить результаты из сохраненного процесса, но не из сообщений. Alexandre Rondeau

Похожие вопросы