Как использовать BCP для вывода данных запроса (функция cdc) в текстовый файл

Я пытаюсь использовать BCP для вывода данных из функции CDC в файл .dat. Я использую следующий запрос (который работает в Server 2008 R2):

USE LEESWIJZER

DECLARE @begin_time datetime
, @end_time datetime
, @from_lsn binary(10)
, @to_lsn binary(10)

SET @end_time = '2013-07-05 12:00:00.000';    

SELECT @to_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal',  @end_time);
SELECT @from_lsn = sys.fn_cdc_get_min_lsn('dbo_LWR_CONTRIBUTIES')

SELECT sys.fn_cdc_map_lsn_to_time(__$start_lsn) AS ChangeDTS
, *
FROM cdc.fn_cdc_get_net_changes_dbo_LWR_CONTRIBUTIES (@from_lsn, @to_LSN, 'all')

(отредактировано для удобочитаемости, используется в BCP как одна строка)

моя строка BCP:

BCP "Query above" queryout "C:\temp\LWRCONTRIBUTIES.dat" -w -t ";|" -r \n -T -S {server\\instance} -o "C:\temp\LWRCONTRIBUTIES.log"

Как видите, мне нужен результирующий файл .dat в юникоде и файл журнала. Я предполагаю, что столбец «ChangeDTS», добавленный к результату функции, вызывает мою проблему. Сообщение об ошибке гласит: «[Microsoft] [SQL Native Client] Столбцы файла хоста могут быть пропущены только при копировании на сервер».

Это может быть решено с помощью файла форматирования, но поскольку этот код должен запускаться ежедневно, вероятно, более одного раза в день, а таблицы могут изменяться, я не хочу постоянно настраивать файлы форматирования (существуют сотни таблиц, требующих такая же процедура).

Кроме того, это выполняется в базе данных клиентов, которым не понравится, что я создаю представления в их базе данных.

У кого-нибудь есть идеи, как я могу создать текстовый файл (.dat) с выбранным количеством столбцов из функции cdc?


person HoneyBadger    schedule 09.08.2012    source источник
comment
Извините за поздний ответ - я тоже пробовал BCP, но он меня не очень удовлетворил. Наконец, я использовал GUI Tool с именем idea для преобразования данных.   -  person peterh    schedule 05.05.2014
comment
В этом конкретном случае графический интерфейс был бы бесполезен, нужен инструмент командной строки. Но все равно спасибо.   -  person HoneyBadger    schedule 05.05.2014


Ответы (1)


Нашел ответ, независимо от того, какая версия bcp используется, похоже, что bcp не может обрабатывать объявления. Если я отредактирую их, работает как шарм. Однако, по словам кого-то из другого forum, BCP должен обрабатывать объявления переменных. Так счастлив, что теперь это работает для меня, но все еще не понимаю, почему это работает сейчас, а не раньше.

person HoneyBadger    schedule 13.08.2012