我正在使用BCP导出和导入数据,但似乎不支持SQLNUMERIC或SQLDECIMAL数据类型。出口似乎很好:
-- hit alt+Q then M to enable SQLCMD mode
use tempdb
go
create table mytest (a decimal);
insert mytest values (3.3);
-- export to c drive
!!bcp "tempdb..mytest" out "c:\mytest.dat" -T -n -S"YourServer\YourInstance"
!!bcp "tempdb..mytest" format nul -T -n -f "c:\mytest.fmt" -S"YourServer\YourInstance"
GO
这没关系,但是当我然后重新导入数据时(如下所示):
SELECT a.*
FROM OPENROWSET(
BULK 'C:\mytest.dat',
FORMATFILE = 'C:\mytest.fmt') AS a
我收到错误消息:
Msg 4838, Level 16, State 1, Line 2
The bulk data source does not support the SQLNUMERIC or SQLDECIMAL data types.
问题如何导入使用BCP导出的数字数据? 我可以控制此问题中显示的bcp命令,但不控制表定义。首选的是仅限T-SQL的解决方案。
答案 0 :(得分:2)
我尝试使用字符一(“-c”)而不是使用“原生”格式,而且它有效。我使用的修改过的脚本是:
use tempdb
go
create table mytest (id int, t varchar(12), a decimal(18,2), c char);
insert mytest values (1, 'test1', 3.6, 'a');
insert mytest values (2, 'test3', 3.3, 'b');
go
!!bcp "tempdb..mytest" out "d:\temp\mytest.dat" -T -c -S"localhost"
!!bcp "tempdb..mytest" format nul -T -c -f "d:\temp\mytest.fmt" -S"localhost"
GO
select * from mytest
SELECT a.*
FROM OPENROWSET(
BULK 'd:\temp\mytest.dat',
FORMATFILE = 'd:\temp\mytest.fmt') AS a
我不确定你的情况是否可行,但你可以尝试一下。