.NET Framework 4.5中CreateXMLFile排序规则随机报错求助
随机出现的SQL程序集字符串排序规则不匹配错误
错误日志
A .NET Framework error occurred during execution of user-defined routine or aggregate "CreateXMLFile": System.Data.SqlTypes.SqlTypeException: Two strings to be concatenated have different collation. System.Data.SqlTypes.SqlTypeException: at System.Data.SqlTypes.SqlString.op_Addition(SqlString x, SqlString y) at spCreateFile.FileCreator.CreateFile(SqlString FilePath, SqlXml Data, SqlString& ErrorMessage).
背景与代码
CreateXMLFile是一个以SQL程序集形式存储的自定义函数,我们通过存储过程收集数据后调用它生成XML文件。以下是触发报错的存储过程核心代码:
Declare @xmlData xml set @xmlData = (select * from @ParametersFortable for xml path('Parameter'), root('ParametersCollection')) DECLARE @Directory nvarchar(max) Declare @TimeStamp nvarchar(200) = (SELECT format(getdate(),'yyyyMMddHHmmssffff')) SET @Directory = 'C:\Path'+ @TimeStamp +'.xml' SET TRANSACTION ISOLATION LEVEL READ COMMITTED; BEGIN TRY IF ISNULL(@Param1, '') <> '' AND ISNULL(@Param2, '') <> '' execute @Status = CreateXMLFile @Directory, @xmlData, @ErrorMessage OUTPUT END TRY BEGIN CATCH SET @Status = ERROR_NUMBER(); SET @ErrorMessage = ERROR_MESSAGE(); update Interface_Log set ErrorMessage = @ErrorMessage where id = @LogID; END CATCH;
上述错误正是在存储过程的CATCH块中捕获到的。
关键现象
- 错误随机触发:针对完全相同的数据,第一次执行可能报错,第二次执行必然成功
- 范围局限:多个存储过程调用同一程序集函数,仅当前存储过程出现此问题
- 频率变化:该错误已存在数年,此前数月仅出现1次,近期每日出现数次,疑似与系统整体负载上升有关
- 已验证点:同一数据生成的
@xmlData内容一致、完整,@Directory路径完全正确
疑问
目前仅猜测故障频率上升与系统负载增加有关,但无法确认根本原因。需要定位为什么会随机出现字符串排序规则不匹配的问题,以及为何第二次执行必然成功。
内容的提问来源于stack exchange,提问作者Paglo
相关产品推荐
相关产品推荐

