如何在 SQL Server 2008 Management Studio 中查看 text 或 varchar(MAX) 列的完整内容?
在此实时 SQL Server 2008(内部版本 10.0.1600)数据库中,有一个 Events
表,其中包含一个名为 Details
的 text
列。 (是的,我意识到这实际上应该是一个 varchar(MAX)
列,但是设置此数据库的人并没有这样做。)
该列包含非常大的异常日志和关联的 JSON 数据,我尝试通过 SQL Server Management Studio 进行访问,但每当我将结果从网格复制到文本编辑器时,它都会将其截断为 43679 个字符。
我在 Internet 上的多个位置读到,您可以在 Tools > 中设置 XML 数据检索的最大字符数。选项>查询结果> SQL服务器> Results To Grid
为 Unlimited,然后执行如下查询:(
select Convert(xml, Details) from Events
where EventID = 13920
请注意,数据列根本不是 XML。CONVERT
将列转换为 XML 只是一种解决方法,我通过谷歌搜索发现其他人已经用来绕过 SSMS 从 text
或 varchar(MAX)
列检索数据的限制。)
但是,在设置上述选项之后,运行查询,然后单击结果中的链接,我仍然收到以下错误:
无法显示 XML。发生以下错误: 发生意外的文件结束。 5号线,位置220160。
一种解决方案是增加从服务器检索 XML 数据的字符数。要更改此设置,请在“工具”菜单上单击“选项”。
那么,知道如何访问这些数据吗?将列转换为 varchar(MAX)
可以解决我的问题吗?
In this live SQL Server 2008 (build 10.0.1600) database, there's an Events
table, which contains a text
column named Details
. (Yes, I realize this should actually be a varchar(MAX)
column, but whoever set this database up did not do it that way.)
This column contains very large logs of exceptions and associated JSON data that I'm trying to access through SQL Server Management Studio, but whenever I copy the results from the grid to a text editor, it truncates it at 43679 characters.
I've read on various locations on the Internet that you can set your Maximum Characters Retrieved for XML Data in Tools > Options > Query Results > SQL Server > Results To Grid
to Unlimited, and then perform a query such as this:
select Convert(xml, Details) from Events
where EventID = 13920
(Note that the data is column is not XML at all. CONVERT
ing the column to XML is merely a workaround I found from Googling that someone else has used to get around the limit SSMS has from retrieving data from a text
or varchar(MAX)
column.)
However, after setting the option above, running the query, and clicking on the link in the result, I still get the following error:
Unable to show XML. The following error happened:
Unexpected end of file has occurred. Line 5, position 220160.One solution is to increase the number of characters retrieved from the server for XML data. To change this setting, on the Tools menu, click Options.
So, any idea on how to access this data? Would converting the column to varchar(MAX)
fix my woes?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(12)
SSMS 只允许无限量的 XML 数据。这不是默认值,需要在选项中设置。
在相当有限的情况下可能起作用的一个技巧是简单地以如下特殊方式命名列,以便将其视为 XML 数据。
在 SSMS 中(至少版本 2012 到当前版本 18.3),结果显示如下
单击它会在 XML 查看器中打开完整结果。向右滚动显示 B 的最后一个字符被保留,
但是这确实存在一些重大问题。向查询添加额外的列会破坏效果,并且额外的行都会与第一行连接起来。最后,如果字符串包含诸如
<
之类的字符,则打开 XML 查看器会失败并出现解析错误。下面是一种更可靠的方法,可以避免 SQL Server 将
<
转换为<
等问题或由于这些字符而失败(在此注明 Adam Machanic)。SSMS only allows unlimited data for XML data. This is not the default and needs to be set in the options.
One trick which might work in quite limited circumstances is simply naming the column in a special manner as below so it gets treated as XML data.
In SSMS (at least versions 2012 to current of 18.3) this displays the results as below
Clicking on it opens the full results in the XML viewer. Scrolling to the right shows the last character of B is preserved,
However this does have some significant problems. Adding extra columns to the query breaks the effect and extra rows all become concatenated with the first one. Finally if the string contains characters such as
<
opening the XML viewer fails with a parsing error.A more robust way of doing this that avoids issues of SQL Server converting
<
to<
etc or failing due to these characters is below (credit Adam Machanic here).我能够让它发挥作用......
I was able to get this to work...
一种解决方法是右键单击结果集并选择“将结果另存为...”。这会将其导出到包含该列的全部内容的 CSV 文件。虽然不完美,但对我来说已经足够好了。
One work-around is to right-click on the result set and select "Save Results As...". This exports it to a CSV file with the entire contents of the column. Not perfect but worked well enough for me.
您尝试过这个简单的解决方案吗?只需点击 2 次即可!
在查询窗口中,
您将获得您想要在文件中看到的所有文本!我可以看到 varchar(MAX) 字段的结果有 130,556 个字符
Did you try this simple solution? Only 2 clicks away!
At the query window,
You will get all the text you want to see in the file!!! I can see 130,556 characters for my result of a varchar(MAX) field
我发现的最简单的解决方法是备份表并查看脚本。为此,
Tasks
>生成脚本...
下一步
选择特定数据库对象
并选择您的表。下一步
将脚本保存到特定位置
保存到文件
并填写相关选项高级
按钮常规
>要编写脚本的数据类型
为仅数据
或架构和数据
,然后单击“确定”下一步
The simplest workaround I found is to backup the table and view the script. To do this
Tasks
>Generate Scripts...
Next
Select specific database objects
and select your table.Next
Save scripts to a specific location
Save to file
and fill in the related optionsAdvanced
buttonGeneral
>Types of data to script
toData only
orSchema and Data
and click okNext
听起来 Xml 的格式可能不太好。如果是这种情况,那么您将无法将其转换为 Xml,并且鉴于此,您可以在 Management Studio 中返回的文本量受到限制。但是,您可以将文本分成更小的块,如下所示:
然后您需要再次手动组合它们。
编辑
听起来 Xml 解析器不喜欢
text
数据中的某些字符。您可以尝试将这些值转换为实体,然后尝试Convert(xml, data)
技巧。所以像这样:(我需要转换为 varchar(max) 因为替换函数不适用于
text
列。您应该没有任何理由无法转换这些text 列转换为
varchar(max)
。)It sounds like the Xml may not be well formed. If that is the case, then you will not be able to cast it as Xml and given that, you are limited in how much text you can return in Management Studio. However, you could break up the text into smaller chunks like so:
You would then need to manually combine them again.
EDIT
It sounds like there are some characters in the
text
data that the Xml parser does not like. You could try converting those values to entities and then try theConvert(xml, data)
trick. So something like:(I needed to cast to varchar(max) because the replace function will not work on
text
columns. There should not be any reason you couldn't convert thosetext
columns tovarchar(max)
.)数据类型 TEXT 很旧,不应再使用,从 TEXT 列中选择数据很痛苦。
ntext、文本和图像 (Transact-SQL)
您需要使用 TEXTPTR (Transact-SQL) 检索文本数据。
另请参阅这篇关于处理文本数据类型的文章。
The data type TEXT is old and should not be used anymore, it is a pain to select data out of a TEXT column.
ntext, text, and image (Transact-SQL)
you need to use TEXTPTR (Transact-SQL) to retrieve the text data.
Also see this article on Handling The Text Data Type.
我想你运气不好。这个问题不是 SQL 级别的问题,就像所有其他答案似乎都关注的那样,而只是用户界面之一。 Management Studio 并不是一个通用/通用数据访问接口。它不是你的界面,而是你的管理区域,并且它在处理二进制数据和大型测试数据方面有严重的限制 - 因为在指定的使用配置文件中使用它的人不会遇到这个问题。
呈现大型文本数据根本不是计划的用途。
您唯一的选择是一个表值函数,它接受文本输入并为每一行剪切行,以便 Management Studio 获得行列表,而不是单行。
You are out of luck, I think. THe problem is not a SQL level problem as all other answers seem to focus on, but simply one of the user interface. Management Studio is not meant to be a general purpose / generic data access interface. It is not there to be your interface, but your administrative area, and it has serious limitations handling binary data and large test data - because people using it within the specified usage profile will not run into this problem.
Presenting large text data is simply not the planned usage.
Your only choice would be a table valued function that takes the text input and cuts it rows for every line, so that Management Studio gets a list of rows, not a single row.
我更喜欢这个简单的 XML hack,它使 SSMS 中的列可以逐个单元格地单击。使用此方法,您可以在 SSMS 的表格视图中快速查看数据,并在感兴趣时单击特定单元格以查看完整值。这与 OP 的技术相同,只是它避免了 XML 错误。
I prefer this simple XML hack which makes columns clickable in SSMS on a cell-by-cell basis. With this method, you can view your data quickly in SSMS’s tabular view and click on particular cells to see the full value when they are interesting. This is identical to the OP’s technique except that it avoids the XML errors.
从 SSMS 18.2 开始,您现在可以在网格结果中查看最多 200 万个字符。 来源
我用下面的代码验证了这一点。
Starting from SSMS 18.2, you can now view up to 2 million characters in the grid results. Source
I verified this with the code below.
来源: SqlAuthority .com
Source: SqlAuthority.com