Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Не сохраняются ID при импорте данных  [new]
_Thor_
Member

Откуда:
Сообщений: 51
Доброго времени суток!

Есть таблица со следующей структурой:
CREATE TABLE [dbo].[ArticleGroups](
	[ArticleGrpId] [int] IDENTITY(0,1) NOT NULL,
	[Name] [nvarchar](100) NOT NULL,
	[ParrentGrpId] [int] NULL,
	[PriceMarkupDef] [decimal](18, 0) NOT NULL CONSTRAINT [DF_ArticleGroups_PriceMarkupDef]  DEFAULT ((0)),
	[PriceMarkup1] [decimal](18, 0) NOT NULL CONSTRAINT [DF_ArticleGroups_PriceMarkup1]  DEFAULT ((0)),
	[PriceMarkup2] [decimal](18, 0) NOT NULL CONSTRAINT [DF_ArticleGroups_PriceMarkup2]  DEFAULT ((0)),
	[PriceMarkup3] [decimal](18, 0) NOT NULL CONSTRAINT [DF_ArticleGroups_PriceMarkup3]  DEFAULT ((0)),
	[PriceMarkup4] [decimal](18, 0) NOT NULL CONSTRAINT [DF_ArticleGroups_PriceMarkup4]  DEFAULT ((0)),
	[PriceMarkup5] [decimal](18, 0) NOT NULL CONSTRAINT [DF_ArticleGroups_PriceMarkup5]  DEFAULT ((0)),
...

В данную таблицу пытаюсь импортировать данные из csv-файла:
0|Арахис
1|Изюм
2|Какао
3|Ароматизаторы
4|Повидло
5|Мак
6|Глазурь
7|ПВФ ассортимент
8|Соки
9|Специи
10|Молоко

Вот используемый файл форматирования:
9.0
2
1       SQLINT        0       4       "|"   1     ArticleGrpId                     ""
2       SQLCHAR      0       100     "\r\n"   2     Name                             Cyrillic_General_CI_AS

В DTS Wizard-е все импортируется нормально включая ID, но вот при использовании BCP, BULK INSERT и INSERT ... OPENROWSET не импортируются значения ID.

Вот скрипты:
bcp DataBaseName.dbo.ArticleGroups in ArticleGroup.csv -f ArticleGroup.fmt -S.\SQLexpress -T -E

BULK INSERT dbo.ArticleGroups 
   FROM 'ArticleGroup.csv' 
   WITH (FORMATFILE = 'ArticleGroups.fmt'
		, KEEPIDENTITY);
GO
SELECT * FROM dbo.ArticleGroups;
GO

INSERT INTO dbo.ArticleGroups
with (KEEPIDENTITY)
(ArticleGrpId, Name)
SELECT *
FROM  OPENROWSET(BULK 'ArticleGroup.csv',
FORMATFILE='ArticleGroups.fmt') as t1;
GO

Игрался с параметрами SET INSERT_IDENTITY ON и DBCC CHECKIDENT (что бы сбросить ID) но не помогает.

При указании KEEPIDENTITY или -E, значения ID все время начинается с 48.

Прошу помощи.

Спасибо.
15 июл 09, 16:55    [7420170]     Ответить | Цитировать Сообщить модератору
 Re: Не сохраняются ID при импорте данных  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
надеюсь, что сначала сбрасывали с помощью DBCC CHECKIDENT, а потом BCP с -E.
15 июл 09, 17:03    [7420217]     Ответить | Цитировать Сообщить модератору
 Re: Не сохраняются ID при импорте данных  [new]
_Thor_
Member

Откуда:
Сообщений: 51
DBCC CHECKIDENT('dbo.ArticleGroups', RESEED, 0)
go
15 июл 09, 17:14    [7420276]     Ответить | Цитировать Сообщить модератору
 Re: Не сохраняются ID при импорте данных  [new]
_Thor_
Member

Откуда:
Сообщений: 51
не помогает
15 июл 09, 17:15    [7420284]     Ответить | Цитировать Сообщить модератору
 Re: Не сохраняются ID при импорте данных  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
_Thor_
не помогает


Что "непомагает"?!

Что выдаст:

DBCC CHECKIDENT('dbo.ArticleGroups', NORESEED)
GO

DBCC CHECKIDENT('dbo.ArticleGroups', RESEED, 1)
go

DBCC CHECKIDENT('dbo.ArticleGroups', NORESEED)
GO
15 июл 09, 17:18    [7420303]     Ответить | Цитировать Сообщить модератору
 Re: Не сохраняются ID при импорте данных  [new]
_Thor_
Member

Откуда:
Сообщений: 51
Вот что выдает:

DBCC CHECKIDENT('dbo.ArticleGroups', NORESEED)
GO
Checking identity information: current identity value '0', current column value '0'.

DBCC CHECKIDENT('dbo.ArticleGroups', RESEED, 1)
go
Checking identity information: current identity value '0', current column value '1'.

DBCC CHECKIDENT('dbo.ArticleGroups', NORESEED)
GO
Checking identity information: current identity value '1', current column value '1'.
15 июл 09, 17:24    [7420355]     Ответить | Цитировать Сообщить модератору
 Re: Не сохраняются ID при импорте данных  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Тогда, что Вам не помагает. Теперь залейте записи с помощью BCP с -E и повторите

DBCC CHECKIDENT('dbo.ArticleGroups', NORESEED)
GO
15 июл 09, 17:29    [7420398]     Ответить | Цитировать Сообщить модератору
 Re: Не сохраняются ID при импорте данных  [new]
_Thor_
Member

Откуда:
Сообщений: 51
pkarklin
Тогда, что Вам не помагает. Теперь залейте записи с помощью BCP с -E и повторите

DBCC CHECKIDENT('dbo.ArticleGroups', NORESEED)
GO


Выполнил BCP :
bcp DataBaseName.dbo.ArticleGroups in ArticleGroup.csv -f ArticleGroup.fmt -S.\SQLexpress -T -E

потом повторил:
DBCC CHECKIDENT('dbo.ArticleGroups', NORESEED)
GO
Checking identity information: current identity value '12337', current column value '12337'.

Там всего 11 записей, ID первой записи начинается с 48.
15 июл 09, 17:35    [7420446]     Ответить | Цитировать Сообщить модератору
 Re: Не сохраняются ID при импорте данных  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Не верю. Или в файле не то, что Вы показываете или форматфайл неправильный.

1. Покажите пример SELECT после загрузки.
2. Прикрепите сам файл к сообщению.
15 июл 09, 17:50    [7420589]     Ответить | Цитировать Сообщить модератору
 Re: Не сохраняются ID при импорте данных  [new]
_Thor_
Member

Откуда:
Сообщений: 51
Вот результат селекта:

48	Арахис	NULL	0	0	0	0	0	0
49	Изюм	NULL	0	0	0	0	0	0
50	Какао	NULL	0	0	0	0	0	0
51	Ароматизаторы	NULL	0	0	0	0	0	0
52	Повидло	NULL	0	0	0	0	0	0
53	Мак	NULL	0	0	0	0	0	0
54	Глазурь	NULL	0	0	0	0	0	0
55	ПВФ ассортимент	NULL	0	0	0	0	0	0
56	Соки	NULL	0	0	0	0	0	0
57	Специи	NULL	0	0	0	0	0	0
12337	Молоко	NULL	0	0	0	0	0	0

прикрепил формат-файл

К сообщению приложен файл (ArticleGroup.fmt - 204bytes) cкачать
15 июл 09, 17:59    [7420677]     Ответить | Цитировать Сообщить модератору
 Re: Не сохраняются ID при импорте данных  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
_Thor_
прикрепил формат-файл


Исходный файл покажите.
15 июл 09, 18:01    [7420685]     Ответить | Цитировать Сообщить модератору
 Re: Не сохраняются ID при импорте данных  [new]
_Thor_
Member

Откуда:
Сообщений: 51
Формат-файл сгенерил через BCP изначально во второй строке в поле Name, Длина префикса равнялась 2, но bcp выдавал ошибки, после длительного курения данного форума и МСДН заменил на 0, и все заработало.
15 июл 09, 18:04    [7420704]     Ответить | Цитировать Сообщить модератору
 Re: Не сохраняются ID при импорте данных  [new]
_Thor_
Member

Откуда:
Сообщений: 51
pkarklin
_Thor_
прикрепил формат-файл


Исходный файл покажите.


прикрепил исходный файл

К сообщению приложен файл (ArticleGroup.csv - 119bytes) cкачать
15 июл 09, 18:04    [7420707]     Ответить | Цитировать Сообщить модератору
 Re: Не сохраняются ID при импорте данных  [new]
_Thor_
Member

Откуда:
Сообщений: 51
Создал тестовую таблицу и файл с данными. Импорт через BCP без формат-файл проходит нормально, значения ID импортируются из файла с данными.
Сгенерил формат-файл и прикрепил к BCP, значения ID перестают импортироваться из файла с данными.

В общем как я вижу проблема с формат-файлом. Попробую использовать формат-файл в формате xml.

Неужели такой глюк только у меня одного?
15 июл 09, 18:50    [7420926]     Ответить | Цитировать Сообщить модератору
 Re: Не сохраняются ID при импорте данных  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
_Thor_
Неужели такой глюк только у меня одного?


Вы не поверите, испытываю аналогичные трудности с форматфайлом. Пока нет времени разобраться. Если будут новости - отпишусь.
15 июл 09, 21:31    [7421316]     Ответить | Цитировать Сообщить модератору
 Re: Не сохраняются ID при импорте данных  [new]
_Thor_
Member

Откуда:
Сообщений: 51
Создал формат-файл в виде xml, подкорректировал, сделал импорт, все импортировалось отлично.
Я так и не понял в чем была проблема ибо вчера с xml были такие же трудности. :)
16 июл 09, 11:53    [7422872]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Не сохраняются ID при импорте данных  [new]
OLGA_SH
Member

Откуда:
Сообщений: 27
аналогичная проблема. тип SQLINT указанный в файле форматирования тянет в базу значения integer как ascii т.е. 0=48, 1=49 и т.д.
30 янв 13, 17:10    [13852201]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить