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

时间:2012-01-19 16:55:54

标签: sql sql-server

如何在SQL Server Management Studio中获取行的完整内容?

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

注意:我有解决方案,但我使用SO来记录这个。如果您有更好的答案,请随时发布。

5 个答案:

答案 0 :(得分:41)

我将其转换为XML

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

processing-instruction位可以阻止它将<等字符授权给&lt;

答案 1 :(得分:5)

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

答案 2 :(得分:3)

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

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

答案 3 :(得分:2)

我在改用SSMS17之前从未遇到过这个问题,所以我现在在这里写。

在SSMS 17中:选择表格,右键单击并选择“修改前#行”,根据需要进行过滤, 然后在可修改的网格中选择单元格:对于长内容,该单元格将显示为空白,按CTRL-A,然后按CTRL-C,再按任意键。

答案 4 :(得分:0)

我公司的一位DBA建议一个可能的解决方案是将数据放在一个临时变量中,然后在循环中使用print函数,如下所示:

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