可能重复:
SQL Server Management Studio: Increase number of characters displayed in result set
更新:注意:该讨论包含标记为答案的INCORRECT答案。
来自SQL Server 2008 R2的SSMS允许在“结果到文本”模式中可视化最多8192个字符,在“结果到网格”模式下可视化为65535个字符。 “文件结果”也被截断。
如何快速便宜地查看更大尺寸的选定值?
更新:
我看到之前的讨论,最好的答案是创建我自己的前端应用程序并不是真正的答案
我不打算与DBMS客户端工具供应商竞争
我只需要看到快速,肮脏或便宜的价值,无论是工具还是非工具。
我简直不敢相信,为了看到单个值,我应该创建客户端应用程序,而且没有任何技巧或方法。
答案 0 :(得分:10)
为什么不直接将数据集作为XML返回,并且没有大小限制?您可以使用强制转换(COLUMN_NAME as XML)来执行此操作。
答案 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并非设计为通用数据查看器。