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


当前回答

快速查看大型varchar/text列的最简单方法:

declare @t varchar(max)

select @t = long_column from table

print @t

其他回答

我能够从NVARCHAR(MAX)列中获得全文(99,208个字符),只需选择(Results to Grid)该列,然后右键单击它,然后将结果保存为CSV文件。要查看结果,使用文本编辑器(不是Excel)打开CSV文件。有趣的是,当我试图运行相同的查询,但启用了“结果到文件”,输出被使用“结果到文本”限制截断。

@MartinSmith描述为对(目前)接受的答案的评论的解决方法对我来说不起作用(在试图查看完整的XML结果时,出现了一个错误,抱怨“'['字符,十六进制值0x5B,不能包含在名称中”)。

我已经为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打开单元格内容

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

使用visual studio代码与sql server插件。对于jsons非常有用

以XML格式返回数据

SELECT CONVERT(XML, [Data]) AS [Value]
FROM [dbo].[FormData]
WHERE [UID] LIKE '{my-uid}'

确保您在SSMS选项窗口中设置了合理的限制,具体取决于您期望的结果。

如果你返回的文本不包含未编码的字符,比如&而不是&这将导致XML转换失败。

使用PowerShell返回数据

为此,您需要在将要运行命令的机器上安装PowerShell SQL Server模块。

如果你已经设置好了,配置并运行下面的脚本:

Invoke-Sqlcmd -Query "SELECT [Data] FROM [dbo].[FormData] WHERE [UID] LIKE '{my-uid}'" -ServerInstance "database-server-name" -Database "database-name" -Username "user" -Password "password" -MaxCharLength 10000000 | Out-File -filePath "C:\db_data.txt"

确保您将-MaxCharLength参数设置为适合您需要的值。

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方法上,但至少想给它应得的荣誉。