如何从SQL Server数据库中可视化nvarchar(max)的值,最大值> 65535?

时间:2010-11-27 13:03:48

标签: sql sql-server select development-environment ssms

  

可能重复:
  SQL Server Management Studio: Increase number of characters displayed in result set
  更新:注意:该讨论包含标记为答案的INCORRECT答案。

来自SQL Server 2008 R2的SSMS允许在“结果到文本”模式中可视化最多8192个字符,在“结果到网格”模式下可视化为65535个字符。 “文件结果”也被截断。

如何快速便宜地查看更大尺寸的选定值?

更新:
我看到之前的讨论,最好的答案是创建我自己的前端应用程序并不是真正的答案 我不打算与DBMS客​​户端工具供应商竞争 我只需要看到快速,肮脏或便宜的价值,无论是工具还是非工具。

我简直不敢相信,为了看到单个值,我应该创建客户端应用程序,而且没有任何技巧或方法。

5 个答案:

答案 0 :(得分:10)

为什么不直接将数据集作为XML返回,并且没有大小限制?您可以使用强制转换(COLUMN_NAME as XML)来执行此操作。

alt text

答案 1 :(得分:2)

快又脏,我喜欢。当然,它可以从Management Studio内部完成,你只需要有点创意。这个想法很简单 - 无法显示整个字符串?切碎并显示更多行。 这是一个函数,它接受varchar输入并输出具有指定大小的块的表。然后,您可以使用此功能从原始表格中选择CROSS APLLY并获得您需要的内容。

功能

create function Splitter( @string varchar(max), @pieceSize int ) 
returns @t table( S varchar(8000) )
as
begin
    if ( @string is null or len(@string) = 0 )
        return

    set @pieceSize = isnull(@pieceSize, 1000)       
    if (@pieceSize < 0 or @pieceSize > 8000)
        set @pieceSize = 8000

    declare @i int = 0
    declare @len int = len(@string)

    while ( @i < @len / @pieceSize  )
    begin
        insert into @t(S) values(substring( @string, @i * @pieceSize + 1, @pieceSize))
        set @i = @i + 1
    end

    if (@len % @pieceSize) != 0
    begin
        if (@len / @pieceSize) = 0
            set @i = 1

        insert into @t(S) values(substring( @string, (@i - 1) * @pieceSize + 1, @len % @pieceSize ))
    end 
    return      
end



使用示例:

select t.ID, t.Col1, t.Col2, t.Col3, pieces.S
from dbo.MyTable as t
cross apply dbo.Splitter( t.MybigStringCol, 1000 ) as pieces

答案 2 :(得分:1)

这就是问题,我在sqlise中攻击了SQLPSX codeplex项目的PowerShell模块(抱歉,我只允许在超链接上使用google for it)。 PowerShell ISE是集成脚本环境,是PowerShell V2的一部分。 SQLPSX是PowerShell模块的集合,目标是管理和查询MS-SQLserver(以及对ORACLE的最小支持)。 ISE的正常输出窗格具有一些错误的截断/包装行为,但可以将输出发送到编辑器窗格。 当使用获取一列宽的结果集的单行并使用'inline'或'isetab'作为输出格式的查询时,您将获得完整的varchar(max),text,CLOB(是的,这也适用于ORACLE)值。 如果查询具有此类列的单行,则结果取决于嵌入的换行符,当前设置的宽度为10000个字符/行。但这是一种脚本语言,你可以自己修改它。

如果您更喜欢纯T-SQL解决方案,可以查看我的项目Extreme T-SQL Script http://etsql.codeplex.com/的来源。使用脚本print_string_in_lines.sql和sp_gentextupdate.sql,您可以使用工具生成更新脚本,以将字段设置为当前内容。 SQL-SERVER 2008是必需的,因为我在内部使用varchar(max)。

BTW我无法访问SQL Server 2008 R2。我虽然每个文本列的限制仍然是大约4000个字符。

我希望有所帮助 贝恩德

答案 3 :(得分:1)

Select
    CASE WHEN T.TheSegment = 1 Then Cast(T.SomeID as varchar(50)) 
         Else '' 
    End as The_ID
    , T.ChoppedField
From  (
   Select SomeID
       , 1 as TheSegment
       , substring(SomeBigField, 1, 8000) as ChoppedField
    from sometable
    Union All
    Select SomeID
       , 2
       , substring(SomeBigfield, 8001, 16000)
    from sometable
) as t
order by t.SomeID, t.TheSegment;

如果需要,在工会中冲洗并重复,或随意递归;不确定你想读的是多少16000个字。大约便宜得多。

很多时候这些大字段包含格式化字符,因此创建自己的表单和使用某种类型的富文本控件的建议是有效的。

答案 4 :(得分:-1)

您可以在前端应用程序中查看它。 SSMS并非设计为通用数据查看器。