导入来自早期版本的 SQL Server 的本机格式数据和字符格式数据
适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)
在 SQL Server 2014 (12.x) 及更高版本中,可以使用 bcp 从 SQL Server 2000 (8.x) 导入本机和字符格式数据, SQL Server 2005 (9.x) 、SQL Server 2008 (10.0.x) 、SQL Server 2008 R2 (10.50.x) 或 SQL Server 2012 (使用 -V 开关) 11.x。 -V 开关将使 SQL Server 使用指定的 SQL Server早期版本中的数据类型,并且数据文件格式与早期版本中的格式相同。
若要为数据文件指定 SQL Server 早期版本,可将 -V 开关与以下的任一限定符一起使用:
SQL Server 版本 | Qualifier |
---|---|
SQL Server 2000 (8.x) | -V80 |
SQL Server 2005 (9.x) | -V90 |
SQL Server 2008 (10.0.x) | -V100 |
SQL Server 2012 (11.x) | -V 110 |
对数据类型的解释
SQL Server 2005 (9.x) 及更高版本均支持一些新的类型。 如果要将新的数据类型导入到 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) | 图像 | 图像 | 图像 |
XML | ntext | ntext | ntext |
UDT** | 图像 | 图像 | 图像 |
*此类型受本机支持。
**UDT 表示用户定义的类型。
使用 -V 80 进行导出
使用 -V80 开关批量导出数据时,本机模式下的 nvarchar(max)、varchar(max)、varbinary(max)、XML 和 UDT 数据将像 text、image 和 ntext 数据一样以带有 4 个字节的前缀形式存储,而不是像 SQL Server 2005 (9.x) 及更高版本默认的那样以带有 8 个字节的前缀形式存储 。
复制日期值
bcp 将使用 ODBC 大容量复制 API。 因此,为了将日期值导入到 SQL Server中, bcp 使用了 ODBC 日期格式 (yyyy-mm-dd hh:mm:ss[ .f... ])。
对于字符格式的数据文件, bcp 命令会为 datetime 和 smalldatetime 类型的值使用 ODBC 默认格式将文件导出。 例如,包含日期 的 datetime 12 Aug 1998
列将以字符串 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)
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈