Azure SQL数据库迁移BCP导入报日期格式无效错误的解决求助
解决BCP导入Azure SQL时的日期格式错误问题
核心问题分析
你的BCP命令存在参数解析错误,同时日期格式的区域兼容性导致解析失败:
- 原命令中
-P 12345678ABC-q将密码与-q参数连在一起,导致密码被错误识别,参数解析异常。 - BCP默认依赖客户端系统区域设置解析日期,自定义格式可能因区域不匹配无法识别。
解决步骤
1. 修正BCP命令参数错误
将密码与-q参数拆分,确保每个参数独立:
bcp contract_management in Query3.csv -S dbaas-share-gs-sql.database.windows.net -d dbaas-tenant-gs-sqldb-tsdvdev01 -U owner_tsdvdev01 -P 12345678ABC -q -c -t ","
2. 修改导出SQL的日期格式为ISO 8601标准
使用SQL Server通用的ISO 8601日期格式(yyyy-MM-ddTHH:mm:ss.ffff),该格式不受区域设置影响,BCP可直接识别:
select contract_id, contractor_name, plan_id, quantity, format(exec_date, 'yyyy-MM-ddTHH:mm:ss.ffff') as exec_date, initial_plan, contract_status, backup_disksize, format(register_date, 'yyyy-MM-ddTHH:mm:ss.ffff') as register_date, format(update_date, 'yyyy-MM-ddTHH:mm:ss.ffff') as update_date from [dbo].[contract_management]
3. 可选:使用格式化文件精确控制字段解析
如果上述方法仍未解决,可生成格式化文件定义字段规则:
- 生成格式化文件:
bcp dbaas-tenant-gs-sqldb-tsdvdev01.dbo.contract_management format nul -c -f contract_management.fmt -S dbaas-share-gs-sql.database.windows.net -U owner_tsdvdev01 -P 12345678ABC -q -t ","
- 打开
contract_management.fmt文件,将日期字段的格式修改为yyyy-MM-ddTHH:mm:ss.ffff - 使用格式化文件导入:
bcp contract_management in Query3.csv -S dbaas-share-gs-sql.database.windows.net -d dbaas-tenant-gs-sqldb-tsdvdev01 -U owner_tsdvdev01 -P 12345678ABC -q -f contract_management.fmt -t ","
内容的提问来源于stack exchange,提问作者Nghi Hoàng Đức
相关产品推荐
相关产品推荐

