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

Откуда:
Сообщений: 6
Здравствуйте!

Уважаемые форумчане, у меня вопрос к тем, кто использовал bulk insert через ntwdblib

Вопрос в следующем:
Имеется приложение, которое вставляет данные в таблицу при помощи bulk insert-а. В таблице имеется поле Identity (которое заодно служит Primary Key-ем). Также есть дочерняя таблица, связанная по этому полю.
Насколько я понял, современные методы Bulk Insert-a, типа утилиты bcp или команды Bulk Insert, умеют работать с такими полями. А что насчет bulk insert-a через ntwdblib? Мне не удалось пропустить это поле в файле данных, единственный вариант когда bulk insert отрабатывает - это когда файл данных и форматный файл содержат это поле, причем файл данных должен уже содержать правильно сгенерированные значения для этого поля, что выглядит как-то сомнительно с точки зрения целостности. В этом случае вставка проходит.
Пробовал сделать вставку во вьюшку, построенную по исходной таблице. ntwdblib ругается, что дескать нет такой таблицы.
Ну так вот - можно ли сделать bulk insert через ntwdblib так, чтобы не подсовывать для поля Identity готовые значения? Или стоит пойти каким-то другим путем?

Заранее спасибо
19 дек 09, 00:46    [8089900]     Ответить | Цитировать Сообщить модератору
 Re: ntwdblib, bulk insert и Identity  [new]
Glory
Member

Откуда:
Сообщений: 104760
Вы наверное путаете bulk copy и bulk insert ?
Так это разные вещи
19 дек 09, 18:38    [8090760]     Ответить | Цитировать Сообщить модератору
 Re: ntwdblib, bulk insert и Identity  [new]
Sergey TSA
Member

Откуда:
Сообщений: 6
Хмм, может быть. Ну, скажу так, имеется куча записей, которые должны быть добавлены (inserted? copied?) в таблицу. Они лежат в файле данных. Формат соответственно задается через форматный файл. В моем приложении используется функция bcp_exec из ntwdblib. То же самое можно сделать при помощи утилиты bcp или команды T-SQL Bulk Insert или Insert into ... select from openrowset. Или не то же самое? Просто и параметры (файл данных и форматный файл) одинаковые, и результат вроде как такой же - вставка данных в таблицу. Может какие-то нюансы и есть, не могу спорить, но вопрос все равно остается - можно ли как-то пропустить Identity столбец в импортируемом файле, если использовать ntwdblib-овские функции?

bcp и Bulk Insert позволяют это сделать, но их не хочется использовать. Причина такая, что насколько я понимаю, они исполняются на сервере, значит нужно файл данных и форматный файл или копировать на сервер, или сервер должен знать путь (и иметь доступ) к файлу на клиенте. В нашем случае это неудобно. Или я что-то не так понимаю?
19 дек 09, 19:59    [8090953]     Ответить | Цитировать Сообщить модератору
 Re: ntwdblib, bulk insert и Identity  [new]
Glory
Member

Откуда:
Сообщений: 104760
bcp_exec - это не bulk insert
bulk insert - это команда TSQL
19 дек 09, 20:03    [8090968]     Ответить | Цитировать Сообщить модератору
 Re: ntwdblib, bulk insert и Identity  [new]
Glory
Member

Откуда:
Сообщений: 104760
Sergey TSA


bcp и Bulk Insert позволяют это сделать, но их не хочется использовать. Причина такая, что насколько я понимаю, они исполняются на сервере, значит нужно файл данных и форматный файл или копировать на сервер, или сервер должен знать путь (и иметь доступ) к файлу на клиенте. В нашем случае это неудобно. Или я что-то не так понимаю?

bcp.exe - это клиентская утилита. И значит ее можно запускать на клиентской машине
19 дек 09, 20:36    [8091052]     Ответить | Цитировать Сообщить модератору
 Re: ntwdblib, bulk insert и Identity  [new]
Sergey TSA
Member

Откуда:
Сообщений: 6
Glory

bcp.exe - это клиентская утилита. И значит ее можно запускать на клиентской машине


ОК, спасибо, попробую.
19 дек 09, 21:00    [8091121]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить