powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Перенос данных из MS SQL через bcp
6 сообщений из 6, страница 1 из 1
Перенос данных из MS SQL через bcp
    #36176647
Andrey Ts
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче, не могу добиться успеха в переносе таблицы (MS SQL 2000) на Sybase ASE 12.5
(в таблице есть и поля text, identity, null и not null)

Выгрузка:
"C:\Program Files\Microsoft SQL Server\80\Tools\Binn\bcp.exe" d_copy.dbo.org out bcp_org.txt -SMS-SQL -Uuser1 -Paaaa -C1251 -c
проходит без ошибок

При загрузке:
"C:\sybase\OCS-12_5\bin\bcp.exe" DATA.dbo.tbl2 in bcp_org.txt -SSYB_SRV -Usa -Pffffff -c -Jcp1251
Получаю ошибки:

cs_convert: cslib user api layer: common library error: The result is truncated because the conversion/operation resulted in overflow.
cs_convert: cslib user api layer: common library error: The conversion/operation was stopped due to a syntax error in the source field.
.....
и т.п.
Уже достало играться с параметрами для BCP

Кто де
...
Рейтинг: 0 / 0
Перенос данных из MS SQL через bcp
    #36176805
Andrey Ts
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
теперь пробовал без параметра -с загружать файл.

Получил в итоге другую ошибку
Negative length-prefix found in BCP data-file

Кто делал подобные переносы данных, дайте совет!
...
Рейтинг: 0 / 0
Перенос данных из MS SQL через bcp
    #36177134
Andrey Ts
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разобрался. оказалось, поля таблиц должны совпадать 1:1, даже порядок.
...
Рейтинг: 0 / 0
Перенос данных из MS SQL через bcp
    #36177284
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey Ts пишет:

> теперь пробовал без параметра -с загружать файл.
>
> Получил в итоге другую ошибку
> Negative length-prefix found in BCP data-file

Без параметра -с -- это ты молодец, это надо было догадаться.

Я не знаю, я конечно не делал такого, но такое по умолчанию
не должно прокатывать -- BCP разные в MSSQL и ASE, и они не обязаны быть
совместимыми.

Тебе надо выливать из MS в том виде, в котором его съест ASE,
или найти какой-то их общий знаменатель.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Перенос данных из MS SQL через bcp
    #36177453
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я делал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
dim Connection_String, SQL_Statement, List_Of_Tables
dim conn, rs, i, fso, field_data, flist
Const ForReading =  1 , ForWriting =  2 , ForAppending =  8 

Connection_String = "DSN=MSSQL_DB;UID=aaa;PWD=bbb"
SQL_Statement = "select * from mydb.dbo."
List_Of_Tables = "list_of_tables.txt"


set fso = CreateObject("Scripting.FileSystemObject")
set flist = fso.OpenTextFile(List_Of_Tables, ForReading, False)
set conn = CreateObject("ADODB.Connection")
conn.Open Connection_String
do while not flist.AtEndOfStream
	Export_Table( flist.ReadLine )
loop
flist.close
conn.Close


sub Export_Table(Table_Name)
	dim Output_File_Name, fout
	WScript.Echo Table_Name
	set rs = conn.Execute(SQL_Statement + Table_Name)
	Output_File_Name = Table_Name & ".dat"
	set fout = fso.CreateTextFile(Output_File_Name, True)
	'' not needed for bcp
	'for i=0 to rs.Fields.Count-1
	'	if i>0 then fout.Write chr(9)
	'	fout.Write rs.Fields(i).Name
	'next
	'fout.WriteLine

	do while not rs.eof
		for i= 0  to rs.Fields.Count- 1 
			if i> 0  then fout.Write chr( 9 )
			field_data = trim(""&rs(i))
			fout.Write field_data
		next
		fout.WriteLine
		rs.MoveNext
	loop

	rs.Close
	fout.Close
end sub
а полученные *.dat уже скармиливал в ASE's bcp.
...
Рейтинг: 0 / 0
Перенос данных из MS SQL через bcp
    #36183039
Alexzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делал я перенос с ASE11 на 12.5, 15.0. Может пригодится. Выглядело так.
Вызгузка:
bcp.exe TableName out DumpFile -Usa -Ppassword -SServerName -c -m0 -A4096 -t"~~\0" -r"~~\0\r\n" -T50000000 -e ErrFile
bcp поле money до 2 десятичных знаков округляет (пришлось делать вьюхи с convert(numeric(19,4), FieldName))

Загрузка:
bcp.exe TableName in DumpFile -Usa -Ppassword -SServerName -c -m0 -A4096 -E -t"~~\0" -r"~~\0\r\n" -T50000000 -e ErrFile
Если нет поля Identity, то -E не используется.

-t и -r на свой вкус можно делать, мне такой вариант подошел.

P.S. Может где ошибся, т.к. выдрал это из написанной утилиты, которя это динамически по метаданным делает, нажал кнопку и пошел процесс выгрузки/загрузки...
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Перенос данных из MS SQL через bcp
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]