Bcp导出SQL Server乱码

Bcp导出SQL Server乱码sp configure showadvanced 1reconfigure configure xp cmdshell 1reconfigure xp cmdshell bcpdatabase table nbsp outD xbb table txt t c C65001 T S bcp databa

sp_configure ‘show advanced options’,1

reconfigure
go
sp_configure ‘xp_cmdshell’,1
reconfigure
go
exec master..xp_cmdshell ‘bcp database.table  out D:\xbb\table.txt -t “,,,,,” -c -C65001 -T -S’

bcp {[[database_name.][schema].]{table_name | view_name} | "query"}     {in | out | queryout | format} data_file     [-m max_errors] [-f format_file] [-x] [-e err_file]     [-F first_row] [-L last_row] [-b batch_size]         [-d database_name] [-n] [-c] [-N] [-w] [-V (70 | 80 | 90 )]     [-q] [-C { ACP | OEM | RAW | code_page } ] [-t field_term]     [-r row_term] [-i input_file] [-o output_file] [-a packet_size]     [-S [server_name[/instance_name]]] [-U login_id] [-P password]         [-T] [-v] [-R] [-k] [-E] [-h"hint [,...n]"] 

参数


database_name

指定的表或视图所在数据库的名称。如果未指定,则使用用户的默认数据库。

也可以使用 -d 显式指定数据库名称。

o
wner

表或视图所有者的名称。如果执行该操作的用户拥有指定的表或视图,则 owner 是可选的。如果未指定 owner,并且执行该操作的用户不是指定的表或视图的所有者,则 SQL Server 将返回错误消息,而且该操作将取消。

table_name

将数据导入 SQL Server (in) 时为目标表名称,将数据从 SQL Server (out) 导出时为源表名称。

view_name

将数据复制到 SQL Server (in) 时为目标视图名称,从 SQL Server (out) 中复制数据时为源视图名称。只有其中所有列都引用同一个表的视图才能用作目标视图。有关将数据复制到视图的限制的详细信息,请参阅 INSERT (Transact-SQL)

 
query 

一个返回结果集的 Transact-SQL 查询。如果该查询返回多个结果集(如指定 COMPUTE 子句的 SELECT 语句),则??将第一个结果集复制到数据文件,而忽略后续的结果集。请将查询放在英文双引号中,将查询中嵌入的任何内容放在英文单引号中。从查询中大容量 复制数据时,还必须指定 queryout

只要在执行 bcp 语句之前存储过程内引用的所有表均存在,查询就可以引用该存储过程。例如,如果存储过程生成一个临时表,则 bcp 语句便会失败,因为该临时表只在运行时可用,而在语句执行时不可用。在这种情况下,应考虑将存储过程的结果插入表中,然后使用 bcp 将数据从表复制到数据文件中。

in | 
out
queryout | 
format

指定大容量复制的方向,具体如下:

  • in 从文件复制到数据库表或视图。
  • out 从数据库表或视图复制到文件。如果指定了现有文件,则该文件将被覆盖。提取数据时,请注意 bcp 实用工具将空字符串表示为 null,而将 null 字符串表示为空字符串。
  • queryout 从查询中复制,仅当从查询大容量复制数据时才必须指定此选项。
  • format 根据指定的选项(-n-c-w 或 -N)以及表或视图的分隔符创建格式化文件。大容量复制数据时,bcp 命令可以引用一个格式化文件,从而避免以交互方式重复输入格式信息。format 选项要求指定 -f 选项;创建 XML 格式化文件时还需要指定 -x 选项。有关详细信息,请参阅创建格式化文件

data_file

数据文件的完整路径。将数据大容量导入 SQL Server 时,数据文件将包含要复制到指定的表或视图中的数据。从 SQL Server 中大容量导出数据时,数据文件将包含从表或视图中复制的数据。路径可以有 1 到 255 个字符。数据文件最多可包含 263 – 1 行。

重要说明 重要提示

对于 format 选项,必须指定 nul 作为 data_file 的值 (formatnul)。

-m 
max_errors

指定取消 bcp 操作之前可能出现的语法错误的最大数目。语法错误是指将数据转换为目标数据类型时的错误。max_errors 总数不包括只能在服务器中检测到的错误,如违反约束。

无法由 bcp 实用工具复制的行将被忽略,并计为一个错误。如果未包括此选项,则默认值为 10。

注意 注意

-m 选项也不适用于转换 money 或 bigint 数据类型。

-f 
format_file

指定格式化文件的完整路径。此选项的含义取决于使用它的环境,具体如下:

  • 如果 -f 与 format 选项一起使用,则将为指定的表或视图创建指定的 format_file。若要创建 XML 格式化文件,请同时指定 -x 选项。有关详细信息,请参阅创建格式化文件
  • 如果与 in 或 out 选项一起使用,则 -f 需要一个现有的格式化文件。
    注意 注意

    in 或 out 选项一起使用时,格式化文件是可选的。如果没有 -f 选项,则在未指定 -n-c-w 或 -N 时,该命令将提示输入格式信息,并允许您将响应保存在格式化文件(默认文件名为 Bcp.fmt)中。

如果 format_file 以连字符 (-) 或正斜杠 (/) 开头,则不要在 -f 与 format_file 名称之间包含空格。

-x

与 format 和 -fformat_file 选项一起使用,可以生成基于 XML 的格式化文件,而不是默认的非 XML 格式化文件。在导入或导出数据时,-x 不起作用。如果不与 format 和 -fformat_file 一起使用,则将生成错误。

注意 注意

若要使用 -x 开关,则必须使用 bcp 10.0 客户端。有关如何使用 bcp 10.0 客户端的信息,请参阅本主题后面的“备注”。

-e 
err_file

指定错误文件的完整路径,此文件用于存储 bcp 实用工具无法从文件传输到数据库的所有行。bcp 命令产生的错误消息将被发送到用户的工作站。如果不使用此选项,则不会创建错误文件。

如果 err_file 以连字符 (-) 或正斜杠 (/) 开头,则不要在 -e 与 err_file 名称之间包含空格。

-F 
first_row

指定要从表中导出或从数据文件导入的第一行的编号。此参数的值应大于 (>) 0,小于 (<) 或等于 (=) 总行数。如果未指定此参数,则默认为文件的第一行。

first_row 可以是一个最大为 2^63-1 的正整数值。-Ffirst_row 从 1 开始。

-L 
last_row

指定要从表中导出或从数据文件中导入的最后一行的编号。此参数的值应大于 (>) 0,小于 (<) 或等于 (=) 最后一行的编号。如果未指定此参数,则默认为文件的最后一行。

last_row 可以是一个最大为 2^63-1 的正整数值。

-b 
batch_size

指定每批导入数据的行数。每个批次均作为一个单独的事务进行导入并记录,在提交之前会导入整批。默认情况下,数据文件中的所有行均作为一个批次导入。若要将行分为多个批次进行操作,请指定小于数据文件中的行数的 batch_size。如果任何批次的事务失败,则将只回滚当前批次中的插入。已经由已提交事务导入的批次不会受到将来失败的影响。

请不要将此选项与 -h”ROWS_PER_BATCH =bb 选项一起使用。

有关详细信息,请参阅管理大容量导入的批处理

-d 
database_name

指定要连接到的数据库。默认情况下,bcp.exe 连接到用户的默认数据库。

如果指定了 -ddatabase_name 以及一个由三个部分组成的名称(database_name.schema.table,作为第一个参数传递给 bcp.exe),将发生错误。这是因为您无法两次指定此数据库名称。

如果 database_name 以连字符 (-) 或正斜杠 (/) 开头,则不要在 -d 与数据库名称之间添加空格。

-n

使用数据的本机(数据库)数据类型执行大容量复制操作。此选项不提示输入每个字段,它将使用本机值。

有关详细信息,请参阅使用本机格式导入或导出数据

-c

使用字符数据类型执行该操作。此选项不提示输入每个字段;它使用 char 作为存储类型,不带前缀;使用 /t(制表符)作为字段分隔符,使用 /r/n(换行符)作为行终止符。

有关详细信息,请参阅使用字符格式导入或导出数据

-N

执行大容量复制操作时,对非字符数据使用本机(数据库)数据类型的数据,对字符数据使用 Unicode 字符。此选项是 -w 选项的一个替代选项,并具有更高的性能。此选项主要用于通过数据文件将数据从一个 SQL Server 实例传送到另一个实例。此选项不提示输入每个字段。如果要传送包含 ANSI 扩展字符的数据,并希望利用本机模式的性能优势,则可使用此选项。

有关详细信息,请参阅使用 Unicode 本机格式导入或导出数据

从 SQL Server 2005 SP1 中开始,如果您通过将 bcp.exe 与 -N 一起使用来导出数据后又将数据导入到同一表架构中,则在存在固定长度的非 Unicode 字符列(例如 char(10))的情况下,系统可能会显示截断警告。

可忽略该警告。解决此警告的一个方法就是使用 -n 来代替 -N

-w

使用 Unicode 字符执行大容量复制操作。此选项不提示输入每个字段;它使用 nchar 作为存储类型,不带前缀;使用 /t(制表符)作为字段分隔符,使用 /n(换行符)作为行终止符。

有关详细信息,请参阅使用 Unicode 字符格式导入或导出数据

-V (
70 | 
80 | 
90 )

使用 SQL Server 早期版本中的数据类型执行大容量复制操作。此选项并不提示输入每个字段,它将使用默认值。 

70 = SQL Server 7.0

80 = SQL Server 2000 

90 = SQL Server 2005 

例如,若要为 SQL Server 7.0 不支持、但是在较高版本的 SQL Server 中引入的类型(例如,bigintsql_variant 和 xml)生成数据,请使用 -V70 选项。

有关详细信息,请参阅导入来自早期版本的 SQL Server 的本机格式数据和字符格式数据

-q

在 bcp 实用工具和 SQL Server 实例之间的连接中,执行 SET QUOTED_IDENTIFIERS ON 语句。使用此选项可以指定包含空格或单引号的数据库、所有者、表或视图的名称。将由三部分组成的整个表名或视图名用英文双引号 (“”) 引起来。

若要指定包含空格或单引号的数据库名称,必须使用 -q 选项。

-q 不适用于传递到 -d 的值。

有关详细信息,请参阅本主题后面的“备注”。

-C { 
ACP | 
OEM | 
RAW | 
code_page }

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

注意 注意

建议在格式化文件中为每个列指定一个排序规则名称。

代码页值

说明

ACP

ANSI/Microsoft Windows (ISO 1252)。

OEM

客户端使用的默认代码页。未指定 -C 时使用的默认代码页。

RAW

不进行代码页间的转换。因为不进行转换,所以这是最快的选项。

code_page

特定的代码页编号,例如 850。

重要说明重要提示
SQL Server 不支持代码页 65001(UTF-8 编码)。

有关详细信息,请参阅在不同排序规则间复制数据

-t 
field_term

指定字段终止符。默认值为 /t(制表符)。使用此参数可以替代默认字段终止符。有关详细信息,请参阅指定字段终止符和行终止符

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

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

-r 
row_term

指定行终止符。默认值为 /n(换行符)。使用此参数可替代默认行终止符。有关详细信息,请参阅指定字段终止符和行终止符

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

如果 row_term 以连字符 (-) 或正斜杠 (/) 开头,则不要在 -r 与 row_term 值之间包含空格。

-i 
input_file

指定响应文件的名称,其中包含在交互模式(未指定 -n-c-w 或 -N)下执行大容量复制时,对该命令要求输入每个数据字段的提示信息所作出的响应。

如果 input_file 以连字符 (-) 或正斜杠 (/) 开头,则不要在 -i 与 input_file 名称之间包含空格。

-o 
output_file

指定文件名称,该文件用于接收从命令提示符重定向来的输出。

如果 output_file 以连字符 (-) 或正斜杠 (/) 开头,则不要在 -o 与 output_file 名称之间包含空格。

-a 
packet_size

指定服务器发出或接收的每个网络数据包的字节数。可以使用 SQL Server Management Studio(或 sp_configure 系统存储过程)来设置服务器配置选项。但是,可以使用此选项逐个替代服务器配置选项。packet_size 的取值范围为 4096 到 65535 字节,默认为 4096 字节。

增大数据包可以提高大容量复制操作的性能。如果无法得到请求的较大数据包,则使用默认值。bcp 实用工具生成的性能统计信息可以显示所用的数据包大小。

-S 
server_name
/
instance_name]

指定要连接的 SQL Server 实例。如果未指定服务器,则 bcp 实用工具将连接到本地计算机上的默认 SQL Server 实例。如果从网络或本地命名实例上的远程计算机中运行 bcp 命令,则必须使用此选项。若要连接到服务器上的 SQL Server 默认实例,请仅指定 server_name。若要连接到 SQL Server 的命名实例,请指定 server_name/instance_name

-U 
login_id

指定用于连接到 SQL Server 的登录 ID。

安全说明 安全说明

如果 bcp 实用工具通过使用集成安全性的受信任连接与 SQL Server 进行连接,则使用 -T 选项(可信连接),而不要使用 user name 和 password 的组合。

-P 
password

指定登录 ID 的密码。如果未使用此选项,bcp 命令将提示输入密码。如果在命令提示符的末尾使用此选项,但不提供密码,则 bcp 将使用默认密码 (NULL)。

安全说明 安全说明

不要使用空密码。请使用强密码。

若要屏蔽密码,请不要同时指定 -P 和 -U 选项。而应在指定 bcp 以及 -U 选项和其他开关(不指定 -P)之后按 Enter,这时命令会提示输入密码。这种方法可以确保输入密码时对其屏蔽。

如果 password 以连字符 (-) 或正斜杠 (/) 开头,则不要在 -P 与 password 之间添加空格。

-T

指定 bcp 实用工具通过使用集成安全性的可信连接连接到 SQL Server。不需要网络用户的安全凭据、login_id 和 password。如果未指定 –T,则需要指定 –U和 –P 才能成功登录。

-v

报告 bcp 实用工具的版本号和版权。

-R

指定使用客户端计算机区域设置中定义的区域格式,将货币、日期和时间数据大容量复制到 SQL Server 中。默认情况下,将忽略区域设置。

-k

指定在操作过程中空列应该保留 null 值,而不是所插入列的任何默认值。有关详细信息,请参阅在大容量导入期间保留 Null 值或使用默认值

-E

指定导入数据文件中的标识值用于标识列。如果未指定 -E,则将忽略所导入数据文件中此列的标识值,而且 SQL Server 将根据创建表期间指定的种子值和增量值自动分配唯一值。

如果数据文件不包含表或视图中的标识列的值,则可使用格式化文件指定,在导入数据时应跳过表或视图中的标识列;SQL Server 将自动为该列分配唯一值。有关详细信息,请参阅 DBCC CHECKIDENT (Transact-SQL)

-E 选项有一个特殊的权限要求。有关详细信息,请参阅本主题后面的“备注”。

-h “ 
hint
,
n

指定向表或视图中大容量导入数据时要用到的提示。














版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226257.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午11:58
下一篇 2026年3月16日 下午11:58


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号