varchar(MAX)
列,但是设置此数据库的人没有这样做。)这个列包含非常大的异常日志和相关的JSON数据,我正在尝试通过SQL Server Management Studio访问它们,但每当我将网格中的结果复制到文本编辑器时,它都会在43679个字符处截断。
我曾经在互联网的不同位置上阅读过,您可以将查询结果的XML数据的最大检索字符数在“工具 > 选项 > 查询结果 > SQL Server > 结果到网格”中设置为无限制,然后执行类似于以下的查询:
select Convert(xml, Details) from Events
where EventID = 13920
(请注意,数据列根本不是XML。将该列转换为XML仅是我通过Google找到的解决方法,别人曾用它来避免从text或varchar(MAX)列检索数据时SSMS的限制。)然而,在设置了上述选项后,运行查询并单击结果中的链接,我仍然会收到以下错误消息:
无法显示XML。 发生了以下错误:已发生意外的文件结尾。 行5,位置220160。
其中一个解决方案是增加从服务器检索XML数据的字符数。 要更改此设置,请在“工具”菜单上单击“选项”。
那么,有没有办法访问这些数据?将列转换为varchar(MAX)是否可以解决我的问题?
CDATA
可能有效,但是如果您的数据包含控制字符,则必须执行替换操作。在我的情况下,我在数据中使用了单元分隔符 ASCII 代码 31。由于我在许多地方仅使用了该字符,因此简单的REPLACE(details, char(31), '&x1f;')
就足够了。如果我有未知字符或大量不同字符要替换,我可能需要找到另一种解决方案。 - ZarephethCDATA
是我的第一个建议。后面的AS [processing-instruction(x)]
可以避免这个问题。 - Martin Smith