Есть серверное приложение , которое обрабатывает приходящие данные и вставляет записи в базу.
Данные приходят в простом текстовом виде, разделенные разделителями..
data 1 # data 2 # data 3... и так далее
вообщем суть такая, что когда сервер парсит data, то после этого сразу же делает INSERT на эти данные. Потом парсит другую data и опять INSERT.
Можно ли как нибудь сделать чтобы он отпарсил все, а потом сделал какой нибудь BATCH INSERT. ? Пока данных приходит немного и это огромной роли не делает, но сам факт вызова INSERT много раз немного не нравится мне.
Сервер - SQL Server 2000. Для работы с базой использую C OLE DB интерфейс
SQL вопрос
-
- Уже с Приветом
- Posts: 2013
- Joined: 16 Mar 2002 10:01
- Location: New York City
-
- Уже с Приветом
- Posts: 4468
- Joined: 21 Sep 2000 09:01
- Location: Sammamish, WA
-
- Уже с Приветом
- Posts: 2013
- Joined: 16 Mar 2002 10:01
- Location: New York City
-
- Уже с Приветом
- Posts: 4468
- Joined: 21 Sep 2000 09:01
- Location: Sammamish, WA
См. MSDN Online - DBLib bcp functions - bcp_bind example.
Но вообще-то лучше пользоваться ODBC (bcp API) или OLEDB (IRowsetFastLoad), так как DBLIB API существует только для обратной совместимости и не поддерживает никаких новшеств начиная с SQL Server 7.0.
Но вообще-то лучше пользоваться ODBC (bcp API) или OLEDB (IRowsetFastLoad), так как DBLIB API существует только для обратной совместимости и не поддерживает никаких новшеств начиная с SQL Server 7.0.
Cheers
-
- Уже с Приветом
- Posts: 4468
- Joined: 21 Sep 2000 09:01
- Location: Sammamish, WA
Для bulk insert statement импортируемые данные должны быть сохранены в файле. При условии, что поля в исходном файле разделены символом '#', как в Вашем первом сообщении, дальше просто делается следующее:
BULK INSERT targetTable FROM 'dataFileName' WITH (FIELDTERMINATOR='#', ROWTERMINATOR='\r\n')
BULK INSERT targetTable FROM 'dataFileName' WITH (FIELDTERMINATOR='#', ROWTERMINATOR='\r\n')
Cheers