繁体   English   中英

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

[英]SQL Server adding extra special characters in query result

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

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

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

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

-t field_term

指定字段终止符。 默认值为\\ t(制表符)。 使用此参数可以覆盖默认字段终止符。 有关更多信息,请参见指定字段终止符和行终止符(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的在线文档中进行了描述。

该主题对于任何数据库都非常重要,以至于它在文档中有一整节描述数据格式和注意事项 ,使用格式文件为每列指定不同的设置 ,以及确保与其他应用程序兼容的准则

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM