未成功使用SQL Manager的输出选项后,我在管道中进行硬编码以使输出管道定界。问题是在管道和下一列之间添加了一个空格。我已经尝试了LTRIM函数,但没有删除空格。
SELECT B.BUSINESS_UNIT+'|'
, C.DESCR+'|'
, (CONVERT(CHAR(10),B.INVOICE_DT,121) + '|')
, CAST(B.INVOICE_ID AS varchar) + '|'
, CAST(A.LINE_NBR AS varchar) + '|'
, CAST(B.GROSS_AMT AS varchar) + '|'
, CAST(B.VENDOR_ID AS varchar) + '|'
, D.NAME1 + '|'
, CAST(M.ITM_ID_VNDR AS varchar) + '|'
, J.DESCR + '|'
FROM Some_Table1 B
, SomeTable2 C
, SomeTable3 A
, SomeTable4 D
, SomeTable5 J
, SomeTable6 M
如果将结果复制到文本编辑器,则管道和下一列之间会有一个空格。
可能不是空格。这可能是一个标签。
当您从SSMS的Results
窗格复制一行并将该行粘贴到文本编辑器或至少粘贴到Notepad ++时,它将在各列之间插入一个选项卡。开启Show All Characters
或等效功能以进行验证。
您可以通过在评论中遵循Jerry Jeremiah的建议,并将输出减少为一行来解决:
SELECT CONCAT(B.BUSINESS_UNIT,'|',
C.DESCR,'|',
CONVERT(CHAR(10),B.INVOICE_DT,121),'|',
B.INVOICE_ID,'|'
etc.)
[CONCAT()
是您的朋友在这里。它会为您处理所有数据类型的转换,但像CONCAT()
这样的极端情况下您需要INVOICE_DT
(尽管我认为此处隐式转换为CHAR
会给您带来预期的结果) 。
此外,也要谨慎声明为varchar(x)
,而不声明长度。如果在错误的位置执行此操作,则它可能默认为varchar
,很少有人会这样做。参见varchar(1)
。