导入来自早期版本的 SQL Server 的本机格式数据和字符格式数据

在 2014 SQL Server中,可以使用 bcp 从 SQL Server 2000、SQL Server 2005、SQL Server 2008、SQL Server 2008 R2 导入本机和字符格式数据,或使用 -V 开关SQL Server 2012。 -V 开关导致 SQL Server 2014 使用指定早期版本的 SQL Server 的数据类型,并且数据文件格式与该早期版本中的格式相同。

若要为数据文件指定 SQL Server 早期版本,可将 -V 开关与以下的任一限定符一起使用:

SQL Server 版本 Qualifier
SQL Server 2000 -V80
SQL Server 2005 -V90
SQL Server 2008 -V100
SQL Server 2012 -V 110

对数据类型的解释

SQL Server 2005 及更高版本支持某些新类型。 如果要将新的数据类型导入到 SQL Server 早期版本中,则必须以早期的 bcp 客户端可读的格式存储该数据类型。 下表总结了如何转换新数据类型以便与早期版本的 SQL Server兼容。

SQL Server 2005 中的新数据类型 版本 6x兼容的数据类型 版本 70 中兼容的数据类型 版本 80 中兼容的数据类型
bigint decimal decimal *
sql_variant text nvarchar(4000) *
varchar(max) text text text
nvarchar(max) ntext ntext ntext
varbinary(max) image image image
XML ntext ntext ntext
UDT1 image image image

* 此类型受本机支持。

1 UDT 表示用户定义的类型。

使用 -V 80 进行导出

使用 -V80 开关批量导出数据时,nvarchar(max)本机模式下的 、、varchar(max)varbinary(max)XML 和 UDT 数据使用 4 字节前缀(如 textimagentext 数据)存储,而不是使用 8 字节前缀(这是 SQL Server 2005 及更高版本的默认值)。

复制日期值

bcp 将使用 ODBC 大容量复制 API。 因此,为了将日期值导入到 SQL Server中, bcp 使用了 ODBC 日期格式 (yyyy-mm-dd hh:mm:ss[ .f... ])。

bcp 命令使用 和 smalldatetime 值的 ODBC 默认格式导出字符格式datetime数据文件。 例如,包含日期 12 Aug 1998datetime 列将以字符串 1998-08-12 00:00:00.000 的形式大容量复制到数据文件中。

重要

使用 bcp 将数据smalldatetime导入字段时,请确保秒的值为 00.000;否则操作将失败。 smalldatetime 数据类型仅支持最接近的分钟值。 BULK INSERT 和 INSERT ...SELECT * FROM OPENROWSET(BULK...) 在这种情况下不会失败,但会截断秒值。

Related Tasks

使用数据格式进行大容量导入或大容量导出

另请参阅

bcp 实用工具
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
数据类型 (Transact-SQL)
SQL Server 数据库引擎的后向兼容性
CAST 和 CONVERT (Transact-SQL)