Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Bulk insert data conversion error (type mismatch)  [new]
alexph1
Member

Откуда:
Сообщений: 62
Microsoft SQL Server 2000 - 8.00.2039 (Intel X86) May 3 2005 23:18:38 Copyright (c) 1988-2003 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 1)

file.ftm
8.0
5
1   SQLCHAR       0   12    "\t"     2   dir_id        Cyrillic_General_CI_AS
2   SQLCHAR       0   150   "\t"     3   file_name     Cyrillic_General_CI_AS
3   SQLCHAR       0   24    "\t"     4   time_changed  Cyrillic_General_CI_AS
4   SQLCHAR       0   19    "\t"     5   size          Cyrillic_General_CI_AS
5   SQLCHAR       0   30    "\r\n"   6   extension     Cyrillic_General_CI_AS

_nbt_files1.dat
2	(Addison-Wesley) Designing Components with the C++ STL (3rd - 2002).pdf	2004-06-29 14:20:38	1176281	pdf

BULK INSERT 
	tb_nbt_file 
FROM 
	'C:\Documents and Settings\Administrator\Local Settings\Temp\_nbt_files1.dat'
WITH (
	CODEPAGE = '65001',
	FORMATFILE = 'C:\inetpub\wwwroot\xfinder_webui\service\file.ftm',
	MAXERRORS = 10,
	FIELDTERMINATOR = '\t',
	ROWTERMINATOR = '\n'
)

ошибка:

Server: Msg 4864, Level 16, State 1, Line 1
Bulk insert data conversion error (type mismatch) for row 1, column 1 (dir_id).


в таблице поле dir_id задано как int, неужели придётся менять в таблице тип данных?
15 июн 05, 21:06    [1623219]     Ответить | Цитировать Сообщить модератору
 Re: Bulk insert data conversion error (type mismatch)  [new]
alexph1
Member

Откуда:
Сообщений: 62
а если сделать вот так:
1   SQLINT      0   12    "\t"     2   dir_id        Cyrillic_General_CI_AS
то не правильно пишет в базу
15 июн 05, 21:15    [1623231]     Ответить | Цитировать Сообщить модератору
 Re: Bulk insert data conversion error (type mismatch)  [new]
VladRUS.ca
Member

Откуда: Toronto
Сообщений: 1172
Скрипт таблицы tb_nbt_file можете привести?
15 июн 05, 21:19    [1623234]     Ответить | Цитировать Сообщить модератору
 Re: Bulk insert data conversion error (type mismatch)  [new]
alexph1
Member

Откуда:
Сообщений: 62
create table "tb_nbt_file" ( 
	"file_id" int identity not null,
	"dir_id" int not null,
	"file_name" varchar(150) not null,
	"time_changed" datetime not null,
	"size" bigint not null,
	"extension" varchar(30) not null)  

go

alter table "tb_nbt_file"
	add constraint "tb_nbt_file_PK" primary key ("file_id")   


go
15 июн 05, 22:16    [1623317]     Ответить | Цитировать Сообщить модератору
 Re: Bulk insert data conversion error (type mismatch)  [new]
VladRUS.ca
Member

Откуда: Toronto
Сообщений: 1172
У меня проблема с колайшин. Но после поправки файла file.ftm на:
8.0
5
1   SQLCHAR       0   12    "\t"     2   dir_id        ""      
2   SQLCHAR       0   150   "\t"     3   file_name     ""    
3   SQLCHAR       0   24    "\t"     4   time_changed  ""
4   SQLCHAR       0   19    "\t"     5   size          ""        
5   SQLCHAR       0   30    "\r\n"   6   extension     "" 
Вставилось без проблем.

Так работает?
create table #tb_nbt_file 
( 
	dir_id int not null,
	file_name varchar(150) not null,
	time_changed datetime not null,
	size bigint not null,
	extension varchar(30) not null
)
go

BULK INSERT 
	#tb_nbt_file 
FROM 
	'C:\Temp\_nbt_files1.dat'
go

select * from #tb_nbt_file
Если да - то делайте вставку в темт таблицу. А из неё уже в постоянную.
Избавитесь от проблемы не только с identity а также с проблемой дубликатов если они существуют. ИМХО - так намного гибче
15 июн 05, 22:50    [1623341]     Ответить | Цитировать Сообщить модератору
 Re: Bulk insert data conversion error (type mismatch)  [new]
alexph1
Member

Откуда:
Сообщений: 62
c таким file.ftm
8.0
5
1   SQLCHAR       0   12    "\t"     2   dir_id        ""      
2   SQLCHAR       0   150   "\t"     3   file_name     ""    
3   SQLCHAR       0   24    "\t"     4   time_changed  ""
4   SQLCHAR       0   19    "\t"     5   size          ""        
5   SQLCHAR       0   30    "\r\n"   6   extension     "" 

не работает, но я пробую вставлять в свою таблицу, а не во временную. Временную вообще использовать не хочу, чтобы лишних ресурсов не хавать.
15 июн 05, 23:46    [1623382]     Ответить | Цитировать Сообщить модератору
 проблемма с FORMATFILE  [new]
alexph1
Member

Откуда:
Сообщений: 62
c таким file.ftm работает
8.0
5
1   SQLINT       0   12    "\t"     2   dir_id        ""      
2   SQLCHAR       0   150   "\t"     3   file_name     ""    
3   SQLCHAR       0   24    "\t"     4   time_changed  ""
4   SQLCHAR       0   19    "\t"     5   size          ""        
5   SQLCHAR       0   30    "\r\n"   6   extension     "" 
но в поле dir_id данные вставляются не коректно (число на много больше чем надо), а если использовать такой file.ftm
8.0
5
1   SQLCHAR       0   12    "\t"     2   dir_id        ""      
2   SQLCHAR       0   150   "\t"     3   file_name     ""    
3   SQLCHAR       0   24    "\t"     4   time_changed  ""
4   SQLCHAR       0   19    "\t"     5   size          ""        
5   SQLCHAR       0   30    "\r\n"   6   extension     "" 
то вылетает ошибка

Server: Msg 4864, Level 16, State 1, Line 1
Bulk insert data conversion error (type mismatch) for row 1, column 1 (dir_id).

что делать подскажите плз???
16 июн 05, 13:44    [1625006]     Ответить | Цитировать Сообщить модератору
 Re: Bulk insert data conversion error (type mismatch)  [new]
VladRUS.ca
Member

Откуда: Toronto
Сообщений: 1172
Не понимаю почему Вас не работает? Может файлы битые?
Прогоните нижеприведенный скрипт.
Если не будет работать - покажите весь его результат.
use tempdb
go
if object_id('tb_nbt_file', 'U') > 0 drop table tb_nbt_file
go
create table tb_nbt_file ( 
	file_id int identity not null,
	dir_id int not null,
	file_name varchar(150) not null,
	time_changed datetime not null,
	size bigint not null,
	extension varchar(30) not null)  

go
insert into tb_nbt_file (dir_id, file_name, time_changed, size, extension)
    select 2, '(Addison-Wesley) Designing Components with the C++ STL (3rd - 2002).pdf', '2004-06-29 14:20:38',1176281,'pdf'
go
select dir_id, file_name, time_changed, size, extension from tb_nbt_file
go

declare @cmd nvarchar(1000)
set @cmd = 'bcp "select dir_id, file_name, time_changed, size, extension from '+db_name()+'..tb_nbt_file" queryout c:\temp\_nbt_files1.dat -S'+@@servername+' -T -CACP -c'
exec master..xp_cmdshell @cmd--, no_output
exec master..xp_cmdshell 'type c:\temp\_nbt_files1.dat' 

if object_id('bcp_fmt', 'U') > 0 drop table bcp_fmt
go
create table bcp_fmt ( bcp_text text )
go
insert into bcp_fmt(bcp_text)
    select '8.0
5
1   SQLCHAR       0   12    "\t"     2   dir_id        ""      
2   SQLCHAR       0   150   "\t"     3   file_name     ""    
3   SQLCHAR       0   24    "\t"     4   time_changed  ""
4   SQLCHAR       0   19    "\t"     5   size          ""        
5   SQLCHAR       0   30    "\r\n"   6   extension     ""'
go
--select bcp_text from bcp_fmt 

declare @cmd nvarchar(1000)
set @cmd = 'bcp "select bcp_text from '+db_name()+'..bcp_fmt" queryout c:\temp\file.ftm -S'+@@servername+' -T -CACP -c'
exec master..xp_cmdshell @cmd--, no_output
exec master..xp_cmdshell 'type c:\temp\file.ftm' 
go

delete tb_nbt_file
go
declare @cmd nvarchar(1000)
set @cmd = 'bcp '+db_name()+'..tb_nbt_file in c:\temp\_nbt_files1.dat -S'+@@servername+' -T -CACP -f c:\temp\file.ftm'
exec master..xp_cmdshell @cmd--, no_output
go
select * from tb_nbt_file
go

delete tb_nbt_file
go
BULK INSERT tb_nbt_file 
FROM 'c:\temp\_nbt_files1.dat'
WITH 
(
	FORMATFILE = 'c:\temp\file.ftm'
)
go
select * from tb_nbt_file
go
17 июн 05, 23:09    [1630689]     Ответить | Цитировать Сообщить модератору
 проблемма с русским тескстом  [new]
alexph1
Member

Откуда:
Сообщений: 62
всё работает, только с русскими буквами пролемма, вставляется фигня всякая, файл данных записан в UTF-8, как считать его чтобы русские буквы были нормальными не знаю, уже по разному пробовал. :(
20 июн 05, 16:45    [1634161]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить