如何在SQL Server Management Studio中查看NTEXT或NVARCHAR(max)中的所有文本?默认情况下,它似乎只返回前几百个字符(255?),但有时我只是想要一种快速查看整个字段的方法,而不必编写程序来做到这一点。即使是SSMS 2012仍然存在这个问题:(


当前回答

今天我用这个方法成功了。它与其他答案相似,它也将内容转换为XML,只是使用了不同的方法。由于我没有在答案中看到FOR XML PATH,我想为了完整性,我应该添加它:

SELECT [COL_NVARCHAR_MAX]
  FROM [SOME_TABLE]
  FOR XML PATH(''), ROOT('ROOT')

这将交付一个包含所有行内容的有效XML,嵌套在一个外部<ROOT></ROOT>元素中。每一行的内容都包含在一个元素中,在本例中,该元素称为<COL_NVARCHAR_MAX>。它的名称可以通过AS使用别名来更改。

特殊字符如&、<或>或类似字符将被转换为它们各自的实体。所以你可能需要转换&lt;, &gt;和,回到它们原来的字符,这取决于你需要对结果做什么。

EDIT

我刚刚意识到CDATA也可以使用FOR XML指定。不过我觉得有点麻烦。这样可以做到:

SELECT 1 as tag, 0 as parent, [COL_NVARCHAR_MAX] as [COL_NVARCHAR_MAX!1!!CDATA]
  FROM [SOME_TABLE]
  FOR XML EXPLICIT, ROOT('ROOT')

其他回答

替代方案1:右键单击复制单元格并粘贴到文本编辑器(希望与utf-8支持)

方法2:右键单击,导出到CSV文件

替代方案3:使用SUBSTRING函数来可视化列的各个部分。例子:

SELECT SUBSTRING(fileXml,2200,200) FROM mytable WHERE id=123456

在较新版本的SSMS中,可以在(查询/查询选项/结果/网格/最大字符检索)菜单中配置:


旧版本的SSMS

选项(查询结果/SQL Server/网格页面结果)

如果要更改当前查询的选项,请在“查询”菜单中单击“查询选项”,或在“SQL Server查询”窗口中单击右键,选择“查询选项”。

...

最大字符检索 输入一个从1到65535的数字来指定在每个单元格中显示的最大字符数。

如你所见,最大值是64k。默认值要小得多。

BTW,结果到文本有更激烈的限制:

每列显示的最大字符数 该值默认为256。增加此值以显示更大的结果集而不截断。最大值为8192。

快速技巧-

SELECT CAST('<A><![CDATA[' + CAST(LogInfo as nvarchar(max)) + ']]></A>' AS xml)
FROM Logs
WHERE IDLog = 904862629

我已经为SSMS写了一个插件,这个问题已经解决了。你可以使用以下两种方法之一:

您可以使用“复制当前单元格1:1”将原始单元格数据复制到剪贴板:

http://www.ssmsboost.com/Features/ssms-add-in-copy-results-grid-cell-contents-line-with-breaks

或者,您可以选择在外部文本编辑器(notepad++或notepad)中使用“单元格可视化”功能:http://www.ssmsboost.com/Features/ssms-add-in-results-grid-visualizers打开单元格内容

(功能允许在任何外部应用程序中打开字段的内容,所以如果你知道它是文本-你使用文本编辑器打开它。如果内容是带有图片的二进制数据,则选择视图作为图片。下面的示例显示打开图片):

PowerShell替代

这是一个老帖子,我读了答案。尽管如此,我还是觉得从SSMS中输出未修改的多行大文本字段有点太痛苦了。最后我写了一个小的c#程序来满足我的需求,但是我想它可能可以用命令行来完成。事实证明,使用PowerShell可以相当容易地做到这一点。

首先从管理PowerShell安装SqlServer模块。

Install-Module -Name SqlServer

使用Invoke-Sqlcmd运行查询:

$Rows = Invoke-Sqlcmd -Query "select BigColumn from SomeTable where Id = 123" `
    -MaxCharLength 2147483647 -ConnectionString $ConnectionString

这将返回一个行数组,你可以输出到控制台,如下所示:

$Rows[0].BigColumn

或输出到一个文件,如下所示:

$Rows[0].BigColumn | Out-File -FilePath .\output.txt -Encoding UTF8

结果是一个漂亮的未删节的文本写入文件以供查看/编辑。我相信有一个类似的命令保存回SQL Server的文本,虽然这似乎是一个不同的问题。

编辑:@dvlsc给出了一个答案,将这种方法描述为次要解决方案。我想是因为它被列为次要答案,所以我一开始就错过了它。我将把我的答案集中在PowerShell方法上,但至少想给它应得的荣誉。