2010-11-27 91 views
1

可能重复:
SQL Server Management Studio: Increase number of characters displayed in result set
更新:注:该讨论包含标记为答案不正确的答案。从SQL Server 2008 R2如何从SQL Server数据库可视化nvarchar(max)的值,最大值> 65535?

SSMS,允许以可视化的最大的8192个字符的“结果到文本”模式和65535“结果网格”模式。 “文件结果”也被截断。

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

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

我只是不能相信,为了看到一个值,我应该创建客户端应用程序,并没有任何技巧或方法。

+0

相关:http://stackoverflow.com/questions/1908271/和http://stackoverflow.com/questions/952247/ – Tomalak 2010-11-27 13:15:08

+0

我看到那些链接,它们不包含任何答案。这个问题没有被回答。 – 2010-11-27 13:32:51

+1

你问这个问题已经差不多一个小时了。您可以编写一个简单的应用程序来查询该值,并在大约5分钟内将其扔到文本框中。寻找解决方法实际上是更有效地利用你的时间? (没有,没有一个) – Donnie 2010-11-27 14:02:55

回答

-1

您可以在前端应用程序中查看它。 SSMS的设计不是一般的数据查看器。

1

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

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

顺便说一句我没有访问SQL Server 2008 R2的权限。我虽然限制仍然是每个文本列约4000个字符。

我希望帮助 贝恩德

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 
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多个字符。大概价格便宜。

很多时候,这些大字段包含格式化字符,所以建议您创建自己的窗体并使用某种类型的richtext控件是有效的。

9

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

alt text

相关问题