在SQL Server Management Studio中查看SQL CE数据库的所有ntext列文本

时间:2009-12-09 16:11:27

标签: sql-server sql-server-ce ssms

我经常想对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次观看?!)。这不是一个大问题,但也许我只是沉迷于它。 来解决这个问题,不存在吗?因此,适度的赏金是活跃的。从最好到最差的顺序,我愿意接受作为答案:

  1. 一种解决方案,与SQL CE中的XML技巧一样简单。也就是说,完成这项工作的单一功能(转换,演员等)。
  2. 攻击SSMS以使其在结果中显示更多文本的非侵入性方法。
  3. 等效的SQL查询(可能是创造性地使用SUBSTRING并生成多个ad-hoc列的东西??)以查看结果。
  4. 该解决方案应该适用于来自SSMS的SQL CE中任意长度的nvarchar和ntext列。有什么想法吗?

4 个答案:

答案 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>

你的答案:

  1. 您不允许演员表但转换有效。问题:引擎中没有xml类型。可能的长解决方法:将数据存储到SQL Express数据库临时或以其他方式获取正确的类型。除非你可以处理开销,否则不是一个小小的壮举。
  2. SSMS正在扩展,但我想说这是一个非首发。它是一个.NET应用程序,可以在Reflector中查看,但这并不重要。
  3. 遗憾的是,从SSMS的角度来看,最糟糕的选择似乎是最简单的选择。您仍然需要自动调整每个列的大小,但希望您不会将其分解为超过2-3个。
  4. 然而,在一天结束时,我不禁想到所有这些仍然是浪费时间。也许您可以找到一个更好的仅限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)