SQL Server在查询结果中添加额外的特殊字符

问题描述 投票:0回答:2

我试图在SQL Server中使用BCP命令提取文件中的一些记录。但是,生成文件时,每列的结果之间都有提取空格。

尝试我只是编写基本的SQL查询,就像这样简单

select 'ABC', 40, 'TEST','NOTWORKING'

当我们复制上述查询的输出并将其粘贴到记事本中时,输出为

ABC 40  TEST    NOTWORKING

注意每个值之间的空格?系统使用BCP命令生成的文件在输出文件中也有相同的空间,这是不正确的。我想在输出文件中看到的是

ABC40TESTNOTWORKING

什么导致这个问题?我很惊讶地看到这样一个奇怪的问题,并希望它可以通过一些变化或设置来修复。请帮忙。

Sample BCP command
     EXEC xp_cmdshell  'bcp "select ''ABC'', 40, ''TEST'',''NOTWORKING''" queryout "E:\Testfile.txt"  -c -T -S""'
Output in the File - Testfile.txt
     ABC    40  TEST    NOTWORKING
sql sql-server bcp
2个回答
3
投票

值之间可能存在选项卡。如果您想要单个值,请使用concat()

select CONCAT('ABC', 40, 'TEST', 'NOTWORKING')

3
投票

没有问题。命令行没有字段终止符参数,因此使用默认值选项卡。这在文档中描述:

-t field_term

指定字段终止符。默认值为\ t(制表符)。使用此参数可覆盖默认字段终止符。有关更多信息,请参阅Specify Field and Row Terminators (SQL Server)

如果在bcp.exe命令中以十六进制表示法指定字段终止符,则该值将在0x00处截断。例如,如果指定0x410041,则将使用0x41。

如果field_term以连字符( - )或正斜杠(/)开头,请不要在-t和field_term值之间包含空格。

该链接指向整篇文章,解释了如何为每个批量操作使用终结符。

至于复制/粘贴操作,它与SQL Server无关。 SQL Server没有UI,它是一种服务。我怀疑记事本中粘贴的内容是从SSMS网格中复制的。

SSMS是一个客户端工具,就像其他任何工具一样。将数据从中复制到剪贴板时,它会决定放在那里的内容以及要使用的格式。该格式可以是纯文本,使用空格和制表符进行布局,RTF,HTML等。

带有选项卡作为字段分隔符的纯文本可能是任何工具的最佳选择,因为它将视觉布局保留到一个点并且仅使用单个字符作为分隔符。也可以使用使用空格的固定长度布局,但这会添加可能是字段一部分的字符。

编码和代码页

-c使用用户的默认代码页导出数据。这意味着使用不同代码页(整理)存储在varchar字段中的文本可能会受到损坏。不可见的Unicode字符也会被破坏并显示为其他字符,或者显示为?

-C

使用字符数据类型执行操作。此选项不会提示每个字段;它使用char作为存储类型,没有前缀,并且\ t(制表符)作为字段分隔符,\ r \ n(换行符)作为行终止符。 -c与-w不兼容。

最好使用-w将文件导出为UTF16。

-w

使用Unicode字符执行批量复制操作。此选项不会提示每个字段;它使用nchar作为存储类型,没有前缀,\ t(制表符)作为字段分隔符,\ n(换行符)作为行终止符。 -w与-c不兼容。

可以使用-C参数指定代码页。例如,-C 1251将使用Windows的Latin1代码页导出数据。 1253将使用希腊语代码页导出它。

-C {ACP | OEM | RAW | code_page}

指定数据文件中数据的代码页。仅当数据包含字符值大于127或小于32的char,varchar或text列时,code_page才相关。

SQL Server 2016及更高版本也可以使用-C 65001将文本导出为UTF8。早期版本不支持UTF8。

版本13之前的版本(SQL Server 2016(13.x))不支持代码页65001(UTF-8编码)。以13开头的版本可以将UTF-8编码导入到早期版本的SQL Server。

所有这些都在bcp's online documentation中描述。

这个主题对于任何数据库都非常重要,因为它在文档中有整个部分,使用data format and considerationsformat files to specify different settings per column来描述guidelines to ensure compatibility with other applications

© www.soinside.com 2019 - 2024. All rights reserved.