Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在SSMS中查看ntext或nvarchar(max)中的所有文本?_Sql Server_Sql Server 2008_Tsql_Ssms - Fatal编程技术网

Sql server 如何在SSMS中查看ntext或nvarchar(max)中的所有文本?

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。默认

如何在SQLServerManagementStudio中查看来自NTEXT或NVARCHAR(max)的所有文本?默认情况下,它似乎只返回前几百个字符(255?),但有时我只想快速查看整个字段,而无需编写程序。即使是SSMS 2012也存在这个问题:(

要更改当前查询的选项,请单击“查询”菜单上的“查询选项”,或在SQL Server查询窗口中单击鼠标右键,然后选择“查询选项”

检索的最大字符数
输入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有一个答案将此方法描述为次要解决方案。我认为,因为它被列为次要答案,所以我在第一篇文章中遗漏了它