SQL查询结果中的Ghost列以文本

时间:2016-11-23 20:38:39

标签: sql-server ssms sql-server-2014

在SQL Server 2014中,我在表中编写了一个查询。如果我选择“结果到网格”,则结果将逐列列为表格。

但是,如果我发送“结果到文本”,结果会列出一些额外的重影列。我说“鬼”,因为那些空列位于实际列之间。

我没有丢失任何实际的列,但是有一些鬼或空列占据了一些列空间。它们不会在列标题或列中显示任何内容。只需要看起来像一些列的空间。我无法调整它们的大小,但必须使用水平滚动条来查看某些列。

我做过的一件事可能对此有所贡献。创建表后,我修改了一些列,添加了一个新列并重新排列了它们的订单。但是“网格结果”都正确反映了这些变化。只有“结果到文本”显示那些鬼列。

2 个答案:

答案 0 :(得分:0)

因为tab字符或其他特殊字符(如CRLF)存在于字段值中,尤其是在char类型中..以下代码演示了这种行为..

SELECT 1 A, 'normal long long long long long text' B, 1 C, 1 D, 1 E
UNION ALL
SELECT 2, 'test' + CHAR(9)  + 'multi-column', 2, 2, 2
UNION ALL
SELECT 3, 'test
break line
text', 3, 3, 3
UNION ALL
SELECT 4 A, 'other normal' B, 4 C, 4 D, 4 E

使用Results to Grid时看起来很正常,但当更改为Results to Text时,结果会变得混乱

A           B                                    C           D           E
----------- ------------------------------------ ----------- ----------- -----------
1           normal long long long long long text 1           1           1
2           test    multi-column                    2           2           2
3           test
    break line
    text             3           3           3
4           other normal                         4           4           4

(4 row(s) affected)

答案 1 :(得分:0)

谢谢Susilo。读完这篇文章之后,我重新检查了表格,发现“ghost”列在列之后是“varchar(50)”类型,并输入“text”,后面有一个非常宽的空列区域。事实上,那些“ghost”列实际上并不是列,而是前面列的扩展列空间。我尝试了一些“结果到文本”的输出格式。我可以修剪列标题以适应列名称的宽度,但除了使用列对齐选项的情况外,记录行不会与其列标题对齐。我想我必须忍受它。至少现在。