Nic*_*ckG 170 t-sql sql-server ssms sql-server-2008
如何在SQL Server Management Studio中查看NTEXT或NVARCHAR(max)中的所有文本?默认情况下,它似乎只返回前几百个字符(255?),但有时我只想快速查看整个字段,而不必编写程序来执行此操作.即使SSMS 2012仍然有这个问题:(
Eri*_*ric 196
通过选择(结果到网格)该列然后右键单击它然后将结果保存为CSV文件,我能够从NVARCHAR(MAX)列中获取全文(99,208个字符).有趣的是,当我尝试运行相同的查询,但启用了结果到文件时,输出被截断使用结果到文本限制.
@MartinSmith描述为对(当前)接受的答案的评论的解决方法对我不起作用(在尝试查看完整的XML结果时出现错误抱怨"'''字符,十六进制值0x5B,不能被列入名称").
小智 122
快速技巧:
SELECT CAST('<A><![CDATA[' + CAST(LogInfo as nvarchar(max)) + ']]></A>' AS xml)
FROM Logs
WHERE IDLog = 904862629
Run Code Online (Sandbox Code Playgroud)
Rem*_*anu 81
若要更改当前查询的选项,请单击"查询"菜单上的"查询选项",或右键单击"SQL Server查询"窗口并选择"查询选项".
...
检索的最大字符
数输入1到65535之间的数字,以指定将在每个单元格中显示的最大字符数.
如你所见,最大值为64k.默认值要小得多.
BTW 结果到文本有更严重的限制:
每列中显示的最大字符数
此值默认为256.增大此值以显示更大的结果集而不截断.最大值是8,192.
And*_*ich 54
我已经为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
(功能允许在任何外部应用程序中打开字段的内容,因此如果您知道它是文本 - 您使用文本编辑器打开它.如果内容是带图片的二进制数据 - 您选择视图作为图片.下面的示例显示打开图片):
以 XML 形式返回数据
SELECT CONVERT(XML, [Data]) AS [Value]
FROM [dbo].[FormData]
WHERE [UID] LIKE '{my-uid}'
Run Code Online (Sandbox Code Playgroud)
确保在 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"
Run Code Online (Sandbox Code Playgroud)
确保将-MaxCharLength
参数设置为适合您需要的值。
我今天用这个方法成功了。它与其他答案类似,它也将内容转换为 XML,只是使用不同的方法。由于我没有FOR XML PATH
在答案中看到提及,我想我应该添加它以确保完整性:
SELECT [COL_NVARCHAR_MAX]
FROM [SOME_TABLE]
FOR XML PATH(''), ROOT('ROOT')
Run Code Online (Sandbox Code Playgroud)
这将提供一个有效的 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')
Run Code Online (Sandbox Code Playgroud)