如何在SQL Server Management Studio中查看NTEXT或NVARCHAR(max)中的所有文本?默认情况下,它似乎只返回前几百个字符(255?)但有时我只想快速查看整个字段,而不必编写程序来执行此操作。即便是SSMS 2012仍然存在这个问题:(
答案 0 :(得分:175)
我能够从NVARCHAR(MAX)列中获取全文(99,208个字符),方法是选择(结果到网格)该列,然后右键单击它,然后将结果保存为CSV文件。有趣的是,当我尝试运行相同的查询,但启用了结果到文件时,输出被截断使用结果到文本限制。
@MartinSmith描述的对(当前)接受的答案的评论的解决方法对我不起作用(在尝试查看完整的XML结果时出错,抱怨“'''字符,十六进制值0x5B,不能包含在名称“)中。
答案 1 :(得分:103)
快速技巧:
SELECT CAST('<A><![CDATA[' + CAST(LogInfo as nvarchar(max)) + ']]></A>' AS xml)
FROM Logs
WHERE IDLog = 904862629
答案 2 :(得分:79)
Options (Query Results/SQL Server/Results to Grid Page)
要更改当前查询的选项,请单击“查询”菜单上的“查询选项”,或右键单击“SQL Server查询”窗口并选择“查询选项”。
...
检索到的最大字符数
输入1到65535之间的数字,以指定将在每个单元格中显示的最大字符数。
如你所见,最大值为64k。默认值要小得多。
BTW Results to Text有更严重的限制:
每列中显示的最大字符数
此值默认为256.增加此值以显示更大的结果集而不截断。最大值是8,192。
答案 3 :(得分:51)
我已经为SSMS写了一个加载项,这个问题在那里修复了。您可以使用以下两种方法之一:
您可以使用“复制当前单元格1:1”将原始单元格数据复制到剪贴板:
http://www.ssmsboost.com/Features/ssms-add-in-copy-results-grid-cell-contents-line-with-breaks
或者,您也可以使用“单元格可视化工具”功能在外部文本编辑器(记事本++或记事本)中打开单元格内容:http://www.ssmsboost.com/Features/ssms-add-in-results-grid-visualizers
(功能允许在任何外部应用程序中打开字段内容,因此如果您知道它是文本 - 您使用文本编辑器打开它。如果内容是带图片的二进制数据 - 您选择视图作为图片。下面的示例显示打开图片):
答案 4 :(得分:1)
如果您只需要查看它,我已经使用过:
print cast(dbo.f_functiondeliveringbigformattedtext(seed) as text)
最终结果是我得到换行符以及SMSS消息窗口中的所有内容。 当然,它只允许一个单元格-如果要从多个行中创建一个单元格,则可以执行以下操作:
declare @T varchar(max)=''
select @T=@T
+ isnull(dbo.f_functiondeliveringbigformattedtext(x.a),'NOTHINGFOUND!')
+ replicate(char(13),4)
from x -- table containing multiple rows and a value in column a
print @T
我用它来验证SQL代码生成的JSON字符串。否则很难阅读!
答案 5 :(得分:0)
快速查看大型varchar / text列的最简单方法:
declare @t varchar(max)
select @t = long_column from table
print @t
答案 6 :(得分:0)
尝试一下:
SELECT CONVERT(XML, [Data]) AS [Value]
FROM [dbo].[FormData]
WHERE [UID] LIKE '{my-uid}'
答案 7 :(得分:0)
替代1 :右键单击以将单元格复制并粘贴到“文本编辑器”(希望有utf-8支持)
替代2 :右键单击并导出到CSV文件
替代3 :使用SUBSTRING功能可显示该列的各个部分。示例:
从mytable WHERE id = 123456中选择SUBSTRING(fileXml,2200,200)
答案 8 :(得分:0)
我今天用这种方法成功了。它与其他答案相似,只是将内容转换为XML,仅使用其他方法即可。因为我没有在答案中提到FOR XML PATH
,所以我想添加它是为了完整性:
SELECT [COL_NVARCHAR_MAX]
FROM [SOME_TABLE]
FOR XML PATH(''), ROOT('ROOT')
这将提供有效的XML,该XML包含嵌套在外部<ROOT></ROOT>
元素中的所有行的内容。各个行的内容将各自包含在一个元素中,在本例中,该元素称为<COL_NVARCHAR_MAX>
。可以通过AS
使用别名来更改名称。
诸如&
,<
或>
之类的特殊字符或类似字符将转换为它们各自的实体。因此,您可能需要根据结果需要将<
,>
和&
转换回其原始字符。
编辑
我刚刚意识到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')
答案 9 :(得分:0)
这是一篇旧文章,我已仔细阅读答案。不过,我发现输出没有SSMS更改的多行大文本字段还是有些痛苦。我最终为自己的需要编写了一个小型C#程序,但不得不考虑可以使用命令行来完成。事实证明,使用PowerShell相当容易。
首先从管理PowerShell安装SqlServer
模块。
Install-Module -Name SqlServer
使用Invoke-Sqlcmd
来运行查询:
$Rows = Invoke-Sqlcmd -Query "select BigColumn from SomeTable where Id = 123" `
-As DataRows -MaxCharLength 1000000 -ConnectionString $ConnectionString
这将返回一个行数组,您可以将其输出到控制台,如下所示:
$Rows[0].BigColumn
或输出到文件,如下所示:
$Rows[0].BigColumn | Out-File -FilePath .\output.txt -Encoding UTF8
结果是将优美的,未被截断的文本写入文件以进行查看/编辑。我确信有一个类似的命令可以将文本保存回SQL Server,尽管这似乎是一个不同的问题。
编辑:事实证明@dvlsc给出了一个答案,该答案将该方法描述为辅助解决方案。我认为,因为它被列为次要答案,这是我首先错过它的原因。我将离开我的答案,重点放在PowerShell方法上,但至少要在应有的位置给予赞赏。