xp_logevent 参数类型无效

Van*_*nel 1 sql-server logs sql-clr

我正在 Windows 7 32 位上使用 SQL Server 2012 Enterprise Edition SP2。

\n\n

我在存储过程中有这段代码。

\n\n
Begin try\n    -- EXEC CLR Stored Procedure\n    exec dbo.MyStoredProcedureCLR @baseUrl, @orderNumber\nend try\nbegin catch\n    Declare @message nvarchar(max);\n\n    set @message = ERROR_MESSAGE()\n    EXEC master..xp_logevent 60000, @message, informational\nend catch\n
Run Code Online (Sandbox Code Playgroud)\n\n

MyStoredProcedureCLR是一个 SQL CLR 存储过程,用于对 RESTful Web 服务进行 PUT。

\n\n

有时,我会遇到404 Not Found异常,我想捕获它并记录它。这是我收到的消息:

\n\n
A .NET Framework error occurred during execution of user-defined routine or aggregate "GetNewCodesICODECLR": \nSystem.Net.WebException: Error en el servidor remoto: (404) No se encontr\xc3\xb3.\nSystem.Net.WebException: \n   en System.Net.HttpWebRequest.GetResponse()\n   en StoredProcedures.GetNewCodesICODECLR(SqlString baseUrl, SqlString orderNumber, SqlString lineCode, Int64 quantity, Int64 codesPrinted, Int64 codesCleared)\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,当我得到这个异常时,我得到另一个异常xp_logevent

\n\n

\'执行扩展存储过程时出错:参数类型无效\'

\n\n

我如何知道 是否ERROR_MESSAGE()是有效参数?或者发生了什么?

\n\n

顺便说一句,我正在 Service Broker 队列中运行一个 SQL CLR 存储过程。

\n

Aar*_*and 5

文档中的主题xp_logevent

'message'
是最多 2048 个字符的字符串。

所以,我会改变这一点:

Declare @message nvarchar(max);
Run Code Online (Sandbox Code Playgroud)

对此:

Declare @message nvarchar(2048);
Run Code Online (Sandbox Code Playgroud)

或者甚至可能是非 Unicode(文档不清楚):

Declare @message varchar(2048);
Run Code Online (Sandbox Code Playgroud)

另外,严重性应该被分隔为一个正确的字符串(尽管文档中的例子很糟糕),并且是大写的(如果它对区分大小写的排序规则很重要,谁知道那些牛仔 XP 编码员可能做了什么):

EXEC master.sys.xp_logevent 60000, @message, 'INFORMATIONAL';
Run Code Online (Sandbox Code Playgroud)

您的 CLR 过程与此处无关...