我经常想对SQL Server Management Studio(SSMS)中的大文本列的值进行“快速检查”。在网格结果模式下,SSMS允许您查看的最大字符数为65535.(在文本结果模式中它甚至更少。)有时我需要查看超出该范围的内容。使用SQL Server 2005数据库,我经常使用将其转换为XML的技巧,因为SSMS允许您以这样的方式查看更多的文本:
SELECT CONVERT(xml, MyCol) FROM MyTable WHERE ...
但是现在我使用的是SQL CE,并且没有Xml数据类型。选项下仍有“最大字符重新获取的XML”值;我想这在连接到其他数据源时很有用。
我知道我可以通过运行一个小的控制台应用程序或其他东西获得全部价值,但在SSMS中是否有办法查看整个ntext列值?
[编辑] 好的,这第一次没有受到太多关注( 18次观看?!)。这不是一个大问题,但也许我只是沉迷于它。 有来解决这个问题,不存在吗?因此,适度的赏金是活跃的。从最好到最差的顺序,我愿意接受作为答案:
SUBSTRING
并生成多个ad-hoc列的东西??)以查看结果。该解决方案应该适用于来自SSMS的SQL CE中任意长度的nvarchar和ntext列。有什么想法吗?
答案 0 :(得分:3)
如果您使用CE 3.5 supporting TOP and OUTER APPLY,请尝试以下声明:
SELECT texts.id, SUBSTRING(texts.text_column, number*100+1, 100)
FROM
(SELECT texts.id, texts.text_column, (99+LEN(texts.text_column))/100 AS l
FROM texts) AS texts
OUTER APPLY
(SELECT TOP(l) number
FROM master.dbo.spt_values val
WHERE name IS NULL
ORDER BY number) n
100(和99)是我在数据中用于测试的文本长度。
答案 1 :(得分:1)
这可能不太理想,但您可以在文本模式下查看时将其分解吗?
例如:
SELECT
SUBSTRING(my_text, 1, 8000),
SUBSTRING(my_text, 8001, 8000)
FROM
dbo.My_Table
它在SQL 2008中按原样运行。对于2005年,您可能需要对VARCHAR(MAX)执行CAST,并且我不确定它是否会按预期工作。
我刚刚在2008年提出了以下查询(我没有CE版本方便)并且它适用于大多数未知长度的文本(我认为限制为800,000个字符,您可能不想要反正只是显示)。这些块作为单独的行出现,因此您可能会在文本中间返回回车符。我不知道这是不是一个问题。
;WITH my_cte AS
(
SELECT
SUBSTRING(my_text, 1, 8000) AS sub,
SUBSTRING(my_text, 8001, LEN(CAST(my_text AS VARCHAR(MAX)))) AS remainder
FROM
dbo.Test_Text
UNION ALL
SELECT
SUBSTRING(remainder, 1, 8000),
SUBSTRING(remainder, 8001, LEN(remainder))
FROM
my_cte
WHERE
LEN(remainder) > 0
)
SELECT
*
FROM
my_cte
答案 2 :(得分:0)
根据这个http://msdn.microsoft.com/en-us/library/ms171931.aspx,您在运行SQL CE中的XML类型时运气不佳。它根本就不存在。你仍然得到一个2GB的BLOB ntext字段,但那没有用。
选择...因为xml在ce查询中工作,但看起来网格仍然将其截断为ntext。要测试创建一个名为Test的表,其中char为nvarchar(4000),text为ntext字段。使用以下语句填充数据并将其返回:
select char, text from test as xml
insert into test (char, text) values (replicate('A',4000), replicate('b',4000) + replicate('B',4000))
我得到两个字段在网格模式下大致相同的位置截断,这表明它截断的值远小于65535.删除as xml
没有任何影响,所以它实际上并没有转到XML数据。 / p>
你的答案:
然而,在一天结束时,我不禁想到所有这些仍然是浪费时间。也许您可以找到一个更好的仅限SQL CE的工具,您可以以适当的方式编辑模式和查看每一列。它甚至可能会出现这种情况,但我没有看到更容易的选择。
答案 3 :(得分:0)
我喜欢这样(在调试模式下启动代码)并且在执行set指令后,您只需从调试窗口中复制大文本,您可以在其中看到@x值,单击放大镜/文本可视化器:< / p>
declare @x varchar(max);
set @x = (select ioub_application_payload from integrator..tbl_interface_outbound where ioub_iz_id = 74)
PRINT (@x)