Оператор Print у TSQL - істота, яку неправильно зрозуміли, ймовірно, через свою назву. Він фактично надсилає повідомлення механізму обробки помилок / повідомлень, який потім передає його до програми, що викликає. PRINT досить німий. Ви можете надіслати лише 8000 символів (4000 символів Unicode). Ви можете надіслати буквальний рядок, змінну рядка (varchar або char) або рядовий вираз. Якщо ви використовуєте RAISERROR, тоді ви обмежитеся лише рядком із 2044 символів. Однак набагато простіше використовувати його для надсилання інформації до програми, що викликає, оскільки вона викликає функцію форматування, подібну до старої printf у стандартній бібліотеці C. RAISERROR може також вказати номер помилки, серйозність та код стану на додаток до текстового повідомлення, а також може використовуватися для повернення визначених користувачем повідомлень, створених за допомогою збереженої процедури системи sp_addmessage.
Ваші процедури обробки помилок не будуть корисними для отримання повідомлень, незважаючи на те, що повідомлення та помилки настільки подібні. Техніка, звичайно, залежить від фактичного способу підключення до бази даних (OLBC, OLEDB тощо). Для того, щоб отримувати та обробляти повідомлення з SQL Server Database Engine, коли ви використовуєте System.Data.SQLClient, вам потрібно створити делегат SqlInfoMessageEventHandler, визначивши метод, який обробляє подію, для прослуховування події InfoMessage для класу SqlConnection. Ви виявите, що інформація про контекст повідомлення, така як серйозність та стан, передається як аргумент зворотного виклику, оскільки з точки зору системи ці повідомлення схожі на помилки.
Це завжди гарна ідея мати спосіб отримати ці повідомлення у своїй програмі, навіть якщо ви просто переглядаєте файл, оскільки вони завжди будуть корисні для них, коли ви намагаєтеся переслідувати справді незрозумілу проблему. Однак я не думаю, що хотів би, щоб кінцеві користувачі коли-небудь їх бачили, якщо ви не можете зарезервувати інформаційний рівень, який відображає матеріали в додатку.