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

时间:2019-04-04 11:20:44

标签: sql sql-server bcp

我正在尝试使用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

2 个答案:

答案 0 :(得分:3)

这些值之间可能会有选项卡。如果要使用单个值,请使用concat()

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

答案 1 :(得分: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与其他任何其他工具一样都是 client 工具。当您将数据从剪贴板复制到剪贴板时,它会决定将其放置在剪贴板中以及使用哪种格式。该格式可以是纯文本,使用空格和制表符进行布局,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