Оператор Print в TSQL является неправильно понятым существом, вероятно, из-за его имени. Фактически он отправляет сообщение механизму обработки ошибок / сообщений, который затем передает его вызывающему приложению. ПРИНТ довольно тупой. Вы можете отправить только 8000 символов (4000 символов Юникода). Вы можете отправить буквальную строку, строковую переменную (varchar или char) или строковое выражение. Если вы используете RAISERROR, то вы ограничены строкой из 2044 символов. Однако его гораздо проще использовать для отправки информации вызывающему приложению, поскольку он вызывает функцию форматирования, аналогичную старому printf в стандартной библиотеке C. RAISERROR может также указывать номер ошибки, серьезность и код состояния в дополнение к текстовому сообщению, а также может использоваться для возврата пользовательских сообщений, созданных с использованием системной хранимой процедуры sp_addmessage. Вы также можете принудительно регистрировать сообщения.
Ваши процедуры обработки ошибок не будут полезны для приема сообщений, несмотря на то, что сообщения и ошибки очень похожи. Техника, конечно, варьируется в зависимости от способа подключения к базе данных (OLBC, OLEDB и т. Д.). Чтобы получать и обрабатывать сообщения от компонента SQL Server Database Engine, при использовании System.Data.SQLClient вам необходимо создать делегат SqlInfoMessageEventHandler, определяющий метод, который обрабатывает событие, для прослушивания события InfoMessage. в классе SqlConnection. Вы обнаружите, что информация контекста сообщения, такая как серьезность и состояние, передается в качестве аргументов для обратного вызова, поскольку с точки зрения системы эти сообщения аналогичны ошибкам.
Это всегда хорошая идея, чтобы иметь возможность получать эти сообщения в вашем приложении, даже если вы просто буферизуете в файл, потому что они всегда будут полезны, когда вы пытаетесь преследовать действительно неясная проблема. Однако я не могу думать, что хочу, чтобы конечные пользователи когда-либо видели их, если вы не можете зарезервировать информационный уровень, который отображает данные в приложении.