【问题标题】:how to get the full resultset from SSMS如何从 SSMS 获取完整的结果集
【发布时间】:2012-01-19 16:55:53
【问题描述】:

如何取回 SQL Server Management Studio 中行的全部内容?

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

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

【问题讨论】:

标签: sql sql-server


【解决方案1】:

我将它转换为 XML

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

processing-instruction 位用于阻止它将<< 等字符实体化

【讨论】:

  • 只需将其转换为 XML 即可获得所有数据?很有趣。
  • 为了让它工作,我首先必须将我的列数据选择到一个变量中,然后按照描述进行 XML 转换。
  • 这可以做成一个聪明的功能还是我能记住的东西
【解决方案2】:

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

完整的内容将保存在文件中,即使有换行符。一些 varchar(max) 列的内容大约为 3MB,并且保存正常,没有被截断。

【讨论】:

  • 这对我有用,同时尝试检查列中的大型 json 字符串。 +1
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    在换SSMS17之前我从来没有遇到过这个问题,所以我现在写到这里。

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

    【讨论】:

      【解决方案5】:

      我公司的一位 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-17
        • 2017-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-20
        • 2018-10-30
        • 1970-01-01
        相关资源
        最近更新 更多