Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Экспорт из таблицы sql в текстовый файл.  [new]
OlegEgorov11
Member

Откуда:
Сообщений: 92
Помогите пожалуйста в решении проблемы. Имеется таблица где есть 10 столбцов и 3 тысячи строк. Используя команду bcp, я экспортирую данные из таблицы в файл txt данные. Они попадают в него одной строкой. Используя разделить строки, ROWTERMINATOR ='\n', можно ли сделать так, чтобы например первые 7 столбцов были на 1 строке, а начиная с 8 столбца данные попадали на вторую строку, а с 3-й строки шла уже новая запись с таблицы sql в том же формате, т.е. 7 столбцов на 3 строке, 3 столбца на 4й и т.д.
10 апр 18, 20:05    [21327703]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из таблицы sql в текстовый файл.  [new]
OlegEgorov11
Member

Откуда:
Сообщений: 92
Т.е. как сделать разделение строк в результирующем файле по названию столбца, но чтобы оставшиеся столбцы попадали на следующую строку. поле имеет тип данных varchar 100
10 апр 18, 20:07    [21327708]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из таблицы sql в текстовый файл.  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20174
Скармливайте bcp не таблицу, а запрос, который собирает все поля записи в одно текстовое со всеми нужными разделителями, переводами строк и прочей шелухой.
10 апр 18, 20:18    [21327731]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из таблицы sql в текстовый файл.  [new]
OlegEgorov11
Member

Откуда:
Сообщений: 92
Akina,
а вы не могли бы привести пример селекта, где выводится результат в том формате, какой я описал?
10 апр 18, 20:49    [21327786]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из таблицы sql в текстовый файл.  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
OlegEgorov11
можно ли сделать так, чтобы например первые 7 столбцов были на 1 строке, а начиная с 8 столбца данные попадали на вторую строку
вопрос, а зачем?
10 апр 18, 20:49    [21327788]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из таблицы sql в текстовый файл.  [new]
OlegEgorov11
Member

Откуда:
Сообщений: 92
Дедушка, нужно для одного проекта, по другому никак не решить. Возможно ли запросом на выборку в самом sql сделать такое? либо же создать временную таблицу куда будут копироваться строки в таком формате поле чего уже с помощью bcp сделать то, что мне нужно?
10 апр 18, 21:33    [21327863]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из таблицы sql в текстовый файл.  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
вас устроит если в файле будет вот так:

p1;p2;p3;p4;p5
p6;p7;;;;
p1;p2;p3;p4;p5
p6;p7;;;;

здесь разделитель ; для наглядности
?
10 апр 18, 21:53    [21327901]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из таблицы sql в текстовый файл.  [new]
OlegEgorov11
Member

Откуда:
Сообщений: 92
Дедушка, да, это именно то, что мне нужно. столбец p5 имеет тип данных varchar(100). не могу понять как сделать, чтобы при экспорте в текстовый файл было именно такое представление. Выше посоветовали сделать именно выборку такую в sql сначала.
10 апр 18, 21:56    [21327905]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из таблицы sql в текстовый файл.  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
OlegEgorov11
Дедушка, да, это именно то, что мне нужно. столбец p5 имеет тип данных varchar(100). не могу понять как сделать, чтобы при экспорте в текстовый файл было именно такое представление. Выше посоветовали сделать именно выборку такую в sql сначала.

2 раздельных текстовых файла, у которых будет одинаковое количество строк. И простой скрипт на powershell, который сделает третий файл, читая первую строку из первого файла, затем первую из второго, затем вторую из первого и вторую из второго и так далее. Кошерных примеров в гугле можно найти таки вагон и небольшую тележку.

Нужно поступать как советские инженеры - максимально упрощать задачу.
10 апр 18, 21:58    [21327910]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из таблицы sql в текстовый файл.  [new]
OlegEgorov11
Member

Откуда:
Сообщений: 92
Дедушка, для примера, у меня сейчас все идет в одну строку:
p1p2...p7.
Если р1 имеет varchar(4) а в таблице только 3 символа то в текстовом файле записывается 3 символа и один пробел.
То же самое и с р5, у него в таблице 100 символов, но там в основном занято по 60-70, остальное пробелы в текстовом файле. И мне нужно чтобы после пробелов, после 100 символов остальное шло на следующую строку и т.д.
10 апр 18, 21:59    [21327911]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из таблицы sql в текстовый файл.  [new]
OlegEgorov11
Member

Откуда:
Сообщений: 92
Andy_OLAP, гениально, спасибо большое. Попробую так, но мне кажется, что можно сделать это все и в sql.
10 апр 18, 22:00    [21327915]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из таблицы sql в текстовый файл.  [new]
OlegEgorov11
Member

Откуда:
Сообщений: 92
Andy_OLAP, посмотрел материал по поводу объединения двух текстовых файлов, пишут что очень долго делает даже небольшие объемы
10 апр 18, 22:14    [21327949]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из таблицы sql в текстовый файл.  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
OlegEgorov11
Andy_OLAP, посмотрел материал по поводу объединения двух текстовых файлов, пишут что очень долго делает даже небольшие объемы

Попробуйте готовое решение. Думаю, скорость будет приемлимой.
10 апр 18, 22:17    [21327957]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из таблицы sql в текстовый файл.  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
OlegEgorov11,

Только там в одну строку соединяют 2 строки, а Вам нужно с разделителем, чтобы тоже 2 строки получилось. Цикл отработает достаточно быстро.
10 апр 18, 22:18    [21327961]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из таблицы sql в текстовый файл.  [new]
OlegEgorov11
Member

Откуда:
Сообщений: 92
Так как столбец после которого нужно внести разделение имеет 10 и более пробелов возможно ли сделать разделение при помощи bcp, где разделителем выступают пробелы, как например((**\t**, end, !!!!!!!!!!, \t—\n и т. д.)), в этом случае я просто в bcp после запроса добавлю скобки в которых будут пробелы ( )?
10 апр 18, 22:22    [21327968]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из таблицы sql в текстовый файл.  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
как запасной вариант:
declare @t table (i int)
declare @p table (p1 char(2), p2 char(2), p3 char(2), p4 char(2), p5 char(2))

insert @t (i)
select
	row_number()over(order by (select 1)) - 1
from
	(values (0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) t1(i)
	cross join (values (0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) t2(i)

insert @p (p1, p2, p3, p4, p5)
values
	('A1', 'B1', 'C1', 'D1', 'E1'),
	('A2', 'B2', 'C2', 'D2', 'E2'),
	('A3', 'B3', 'C3', 'D3', 'E3')

;
with
t1 as
	(
	select
	p1, p2, p3, rn + i as n
	from
	(
	select
	p1, p2, p3, row_number()over(order by (select 1)) as rn
	from
	@p p
	)q
	inner join @t t on t.i = q.rn - 1
	),
t2 as
	(
	select
	p4 as p1, p5 as p2, null as p3, rn + i as n
	from
	(
	select
	p4, p5, row_number()over(order by (select 1)) as rn
	from
	@p p
	)q
	inner join @t t on t.i = q.rn
	)

select
	p1, p2, p3, n
from
	t1
union all
select
	p1, p2, p3, n
from
	t2
order by
	n
далее выгрузка через bcp
10 апр 18, 22:25    [21327976]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из таблицы sql в текстовый файл.  [new]
OlegEgorov11
Member

Откуда:
Сообщений: 92
Дедушка, спасибо))
10 апр 18, 22:34    [21327986]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из таблицы sql в текстовый файл.  [new]
OlegEgorov11
Member

Откуда:
Сообщений: 92
Дедушка, подскажите, тот запрос, что вы написали, он представляет матрицу(А1,В1,С1и т.д) в формате который мне нужен, но как сделать выборку в этом формате из селектра, где построчно выводится тысячи строк к примеру из 10 столбцов?
11 апр 18, 10:11    [21328567]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из таблицы sql в текстовый файл.  [new]
OlegEgorov11
Member

Откуда:
Сообщений: 92
Дедушка, я, так понимаю, что нужно вместо матрицы добавить селект, но тогда ругается на несовместимость values, хотя в начале запроса я исправляю, как у меня в таблице, varchar и т.д
11 апр 18, 10:31    [21328653]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из таблицы sql в текстовый файл.  [new]
OlegEgorov11
Member

Откуда:
Сообщений: 92
Дедушка, или нужно делать весь этот запрос из нужного мне селекта?
11 апр 18, 11:31    [21328894]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из таблицы sql в текстовый файл.  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
OlegEgorov11,

@p - это ваша таблица (замените @p на dbo.MyTable, например)
в t1 поля p1, p2, p3 это поля вашей таблицы которые "должны быть в первой строке файла",
а в t2 поля p4, p5 это оставшиеся поля вашей таблицы которые "должны быть во второй строке файла"
11 апр 18, 11:53    [21328967]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из таблицы sql в текстовый файл.  [new]
OlegEgorov11
Member

Откуда:
Сообщений: 92
Дедушка, при замене в 4х местах @р на имя таблицы, после дбо, в первом месте, подчеркивает точко, как некорректный синтаксес
11 апр 18, 12:26    [21329137]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из таблицы sql в текстовый файл.  [new]
OlegEgorov11
Member

Откуда:
Сообщений: 92
Дедушка, а можно в этом запросе где нибудь вставить условие, либо же делать отдельно запрос с условием и от него уже этот запрос?
11 апр 18, 19:39    [21331044]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из таблицы sql в текстовый файл.  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
Получайте нужные вам данные любым нужным вам запросом.
Сохраняйте результат этого запроса во временную таблицу (#p, например).
В приведённом выше коде убираете создание и заполнение таблицы @p (тестовая).
В t1 и t2 заменяете @p на #p.
11 апр 18, 19:57    [21331061]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из таблицы sql в текстовый файл.  [new]
OlegEgorov11
Member

Откуда:
Сообщений: 92
Дедушка, спасибо, у меня все получилось, только один вопрос. Можно ли как то убрать столбец с номером, я понимаю что по нему идет сортировка, но он мне сильно мешается, есть вариант засунуть весь этот запрос в подзапрос и оттуда уже выбрать без столбца этого?
12 апр 18, 20:34    [21334832]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить