Die Print-Anweisung in TSQL ist eine missverstandene Kreatur, wahrscheinlich wegen ihres Namens. Es sendet tatsächlich eine Nachricht an den Fehler- / Nachrichtenbehandlungsmechanismus, der sie dann an die aufrufende Anwendung überträgt. PRINT ist ziemlich dumm. Sie können nur 8000 Zeichen (4000 Unicode-Zeichen) senden. Sie können eine Literalzeichenfolge, eine Zeichenfolgenvariable (varchar oder char) oder einen Zeichenfolgenausdruck senden. Wenn Sie RAISERROR verwenden, sind Sie auf eine Zeichenfolge von nur 2.044 Zeichen beschränkt. Es ist jedoch viel einfacher, damit Informationen an die aufrufende Anwendung zu senden, da eine Formatierungsfunktion aufgerufen wird, die der alten printf in der Standard-C-Bibliothek ähnelt. RAISERROR kann zusätzlich zur Textnachricht auch eine Fehlernummer, einen Schweregrad und einen Statuscode angeben und benutzerdefinierte Nachrichten zurückgeben, die mit der gespeicherten Systemprozedur sp_addmessage erstellt wurden.
Ihre Fehlerbehandlungsroutinen eignen sich nicht für den Empfang von Nachrichten, obwohl Nachrichten und Fehler so ähnlich sind. Die Technik hängt natürlich von der Art und Weise ab, wie Sie sich mit der Datenbank verbinden (OLBC, OLEDB usw.). Um Nachrichten vom SQL Server-Datenbankmodul zu empfangen und zu verarbeiten, müssen Sie bei Verwendung von System.Data.SQLClient einen SqlInfoMessageEventHandler-Delegaten erstellen, der die Methode identifiziert, die das Ereignis behandelt, um auf das InfoMessage-Ereignis zu warten in der SqlConnection-Klasse. Sie werden feststellen, dass Nachrichtenkontextinformationen wie Schweregrad und Status als Argumente an den Rückruf übergeben werden, da diese Nachrichten aus Systemsicht wie Fehler sind.
Es ist immer eine gute Idee, diese Nachrichten in Ihrer Anwendung abzurufen, selbst wenn Sie nur in eine Datei spoolen, da sie immer dann verwendet werden können, wenn Sie versuchen, ein wirklich dunkles Problem zu verfolgen. Ich kann jedoch nicht glauben, dass die Endbenutzer sie jemals sehen sollen, es sei denn, Sie können eine Informationsebene reservieren, die Inhalte in der Anwendung anzeigt.