Sql server 如何在SSMS中查看ntext或nvarchar(max)中的所有文本?
如何在SQLServerManagementStudio中查看来自NTEXT或NVARCHAR(max)的所有文本?默认情况下,它似乎只返回前几百个字符(255?),但有时我只想快速查看整个字段,而无需编写程序。即使是SSMS 2012也存在这个问题:( 要更改当前查询的选项,请单击“查询”菜单上的“查询选项”,或在SQL Server查询窗口中单击鼠标右键,然后选择“查询选项” 检索的最大字符数Sql server 如何在SSMS中查看ntext或nvarchar(max)中的所有文本?,sql-server,sql-server-2008,tsql,ssms,Sql Server,Sql Server 2008,Tsql,Ssms,如何在SQLServerManagementStudio中查看来自NTEXT或NVARCHAR(max)的所有文本?默认情况下,它似乎只返回前几百个字符(255?),但有时我只想快速查看整个字段,而无需编写程序。即使是SSMS 2012也存在这个问题:( 要更改当前查询的选项,请单击“查询”菜单上的“查询选项”,或在SQL Server查询窗口中单击鼠标右键,然后选择“查询选项” 检索的最大字符数 输入1到65535之间的数字,以指定每个单元格中显示的最大字符数 如您所见,最大值为64k。默认
输入1到65535之间的数字,以指定每个单元格中显示的最大字符数 如您所见,最大值为64k。默认值要小得多 顺便说一句,它还有更大的限制: 每列中显示的最大字符数
此值默认为256。增加此值可在不截断的情况下显示更大的结果集。最大值为8192
我已经为SSMS编写了一个外接程序,该问题已在那里解决。您可以使用以下两种方法之一: 您可以使用“复制当前单元格1:1”将原始单元格数据复制到剪贴板: 或者,您也可以使用“单元格可视化工具”功能在外部文本编辑器(记事本++或记事本)中打开单元格内容:
(该功能允许在任何外部应用程序中打开字段的内容,因此如果您知道它是文本,则可以使用文本编辑器打开它。如果内容是带有图片的二进制数据,则可以选择“查看为图片”。下面的示例显示打开图片):我可以通过选择(结果到网格)仅显示该列,然后右键单击该列,然后将结果保存为CSV文件。要查看结果,请使用文本编辑器(而不是Excel)打开CSV文件。有趣的是,当我尝试运行相同的查询,但启用了“结果到文件”时,使用“结果到文本”限制截断了输出 @MartinSmith将其描述为对(当前)已接受答案的评论,但这项工作对我来说不起作用(在尝试查看完整的XML结果时出错,抱怨“名称中不能包含“[”字符,十六进制值0x5B”)。快速技巧-
SELECT CAST('<A><![CDATA[' + CAST(LogInfo as nvarchar(max)) + ']]></A>' AS xml)
FROM Logs
WHERE IDLog = 904862629
选择强制转换(“”作为xml)
从日志
其中IDLog=9048629
快速查看大型varchar/文本列的最简单方法:
declare @t varchar(max)
select @t = long_column from table
print @t
以XML形式返回数据
SELECT CONVERT(XML, [Data]) AS [Value]
FROM [dbo].[FormData]
WHERE [UID] LIKE '{my-uid}'
确保您在SSMS选项窗口中设置了合理的限制,具体取决于您期望的结果。
如果您返回的文本不包含会导致XML转换失败的未编码字符,如&
,而不是&;
,则这将起作用
使用PowerShell返回数据
为此,需要在运行命令的计算机上安装
如果已全部设置,请配置并运行以下脚本:
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
参数设置为适合您需要的值。备选方案1:右键单击复制单元格并粘贴到文本编辑器中(希望有utf-8支持)
备选方案2:右键单击并导出到CSV文件
备选方案3:使用子字符串函数可视化列的各个部分。示例:
从id=123456的mytable中选择子字符串(fileXml,2200200)
如果您只需要查看它,我使用了以下方法:
print cast(dbo.f_functiondeliveringbigformattedtext(seed) as text)
最终的结果是,我在SMS的messages窗口中获得了换行符和所有内容。
当然,它只允许单个单元格-如果要从多行中创建单个单元格,可以执行以下操作:
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字符串。否则读起来太难了!我今天成功地使用了这个方法。它与其他答案类似,它也将内容转换为XML,只是使用了不同的方法。因为我没有看到答案中提到的XML路径的
,我想我应该为com添加它丰满度:
SELECT [COL_NVARCHAR_MAX]
FROM [SOME_TABLE]
FOR XML PATH(''), ROOT('ROOT')
这将提供一个有效的XML,其中包含嵌套在外部
元素中的所有行的内容。每个行的内容将包含在一个元素中,例如,该元素称为
。可以使用别名通过AS
更改其名称
特殊字符(如&
、
或类似字符)将转换为各自的实体。因此,您可能需要将
、
和&;
转换回其原始字符,具体取决于您需要对结果执行的操作
编辑
我刚刚意识到,也可以使用FOR XML
指定CDATA
。不过我觉得这有点麻烦。这样做可以:
SELECT 1 as tag, 0 as parent, [COL_NVARCHAR_MAX] as [COL_NVARCHAR_MAX!1!!CDATA]
FROM [SOME_TABLE]
FOR XML EXPLICIT, ROOT('ROOT')
PowerShell替代方案
这是一篇老文章,我通读了答案。尽管如此,我还是觉得不改变SSM输出多行大文本字段有点太痛苦了。我最终根据自己的需要编写了一个小C#程序,但我开始认为它可能可以使用命令行来完成。事实证明,使用PowerShell可以相当容易地做到这一点
Install-Module -Name SqlServer
从管理PowerShell安装模块开始
Install-Module -Name SqlServer
用于运行查询:
$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
或输出到文件,如下所示:
$Rows[0].BigColumn
$Rows[0].BigColumn | Out-File -FilePath .\output.txt -Encoding UTF8
结果是一个漂亮的未截断文本被写入文件以供查看/编辑。我确信有类似的命令将文本保存回SQL Server,尽管这似乎是另一个问题
编辑:事实证明@dvlsc有一个答案将此方法描述为次要解决方案。我认为,因为它被列为次要答案,所以我在第一篇文章中遗漏了它