2011-08-31 84 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

這是超級!它看起來很有希望! –

相關問題