2011-08-31 44 views
1

我正在使用BCP导出和导入数据,但似乎不支持SQLNUMERIC或SQLDECIMAL数据类型。出口似乎是罚款:批量数据源不支持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解决方案是首选。

回答

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 

我不确定在您的情况下是否可行,但您可以试一试。

+0

这是超级!它看起来很有希望! –