我在 Windows 7 32 位上使用 SQL Server 2012 Enterprise Edition SP2。
我在存储过程中有这段代码。
Begin try
-- EXEC CLR Stored Procedure
exec dbo.MyStoredProcedureCLR @baseUrl, @orderNumber
end try
begin catch
Declare @message nvarchar(max);
set @message = ERROR_MESSAGE()
EXEC master..xp_logevent 60000, @message, informational
end catch
MyStoredProcedureCLR
是一个 SQL CLR 存储过程,它对 RESTful Web 服务进行 PUT。
有时,我遇到404 Not Found
异常,我想捕获它并记录它。这是我收到的消息:
A .NET Framework error occurred during execution of user-defined routine or aggregate "GetNewCodesICODECLR":
System.Net.WebException: Error en el servidor remoto: (404) No se encontró.
System.Net.WebException:
en System.Net.HttpWebRequest.GetResponse()
en StoredProcedures.GetNewCodesICODECLR(SqlString baseUrl, SqlString orderNumber, SqlString lineCode, Int64 quantity, Int64 codesPrinted, Int64 codesCleared)
但是,当我得到那个例外时,我得到另一个例外xp_logevent
:
'执行扩展存储过程时出错:参数类型无效'
我怎么知道ERROR_MESSAGE()
是一个有效参数?或者发生了什么事?
顺便说一下,我在 Service Broker 队列中运行那个 SQL CLR 存储过程。
从文档中的
xp_logevent
主题:所以,我会改变这个:
对此:
或者甚至可能是非 Unicode(文档不清楚):
此外,严重性应该被分隔为一个正确的字符串(尽管文档中的示例很糟糕),并且是大写的(如果它对区分大小写的排序规则很重要,谁知道那些牛仔 XP 编码员可能做了什么):
您的 CLR 程序与此处无关...