如何从SSMS获取完整的结果集

22

如何在SQL Server管理工具中获取完整的行内容?

如果使用“结果输出到网格”,数据将被编码,因此换行等内容会丢失。如果选择“结果输出到文件”或“结果输出到文本”,则文本仅限制为8192个字符。

注意:我已经有解决方案了,但我在使用SO记录此过程。如果您有更好的答案,请随时发布。


可能是如何在SSMS中查看ntext或nvarchar(max)的所有文本?的重复问题。 - Michael Freidgeim
5个回答

51

我将其转换为XML格式

select @variable_with_long_text
 as [processing-instruction(x)] FOR XML PATH 

这里的processing-instruction是为了防止它将像<这样的字符实体化为&lt;


将其简单转换为XML就能获取所有数据?有趣。 - javamonkey79
1
为了使这个工作正常运行,我首先必须将我的列数据选择到一个变量中,然后按照描述进行XML转换。 - danjuggler
这个能否被制作成一个巧妙的函数或者我可以记住的东西? - Simon_Weaver

8

只需使用默认的“结果以网格形式显示”,然后右键单击网格结果并选择“另存为...”CSV。

完整内容将保存在文件中,即使有换行符也不会丢失。一些varchar(max)列的内容约为3MB,也能正常保存,不会被截断。


这对我很有用,当我尝试检查列中的大型JSON字符串时。+1 - Yogi

5

我为SSMS开发了一个插件——“SSMSBoost”,最近添加了“复制单元格内容1:1”的功能(可在网格的上下文菜单中访问)。它会返回单元格中的所有数据,不会进行任何修改和截断。


2

在更换为SSMS17之前,我从未遇到过这个问题,所以现在在这里写出来。

在SSMS 17中:选择表格,右键选择“修改前#行”,按需要筛选, 然后选择可修改的网格中的单元格:对于长内容,它将显示为空白,按CTRL-A,然后CTRL-C,然后粘贴到任何您想要的地方。


-1

我们公司的一位数据库管理员建议的可能解决方案是将数据放入一个临时变量中,然后在循环中使用打印函数,像这样:

DECLARE @contents varchar(MAX)
SET @contents = ''

SELECT     @contents = @contents + Contents + CHAR(13)
FROM         dbo.tFOO
WHERE     someConition

DECLARE @tContents TABLE (id int IDENTITY, contents varchar(MAX))

WHILE @contents LIKE '%' + CHAR(13) + '%'
BEGIN
    PRINT SUBSTRING(@contents, 0, CHARINDEX(CHAR(13), @contents))

    SET @contents = SUBSTRING(@contents, CHARINDEX(CHAR(13), @contents)+1, LEN(@contents) - CHARINDEX(CHAR(13), @contents))
END

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接