Источник массовых данных не поддерживает типы данных SQLNUMERIC или SQLDECIMAL - PullRequest
1 голос
/ 31 августа 2011

Я использую 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

Я получаю сообщение об ошибке:1007 *

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.

1 Ответ

2 голосов
/ 31 августа 2011

Вместо использования «родного» формата я попытался использовать символ («-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 

Я не уверен, выполнимо ли это в вашем случае, но вы можете попробовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...