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

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

Есть запрос, который используется для выгрузки данных с помощью команды bcp.
Необходимо процедуру выгрузки, которая на сегодня выполняется вручную, автоматизировать. Выгрузка должна происходить раз в неделю, и запрос, который используется bcp, содержит дату, которая при каждой выгрузке должна принимать новое значение.
Скажите, можно ли такую задачу реализовать в SQL или может быть, создать bat - файл с командой (вот только как в этом случае быть с датой в запросе)?

Спасибо
22 июл 12, 00:01    [12897550]     Ответить | Цитировать Сообщить модератору
 Re: BCP: запрос с параметрами  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
aashuron,

job
22 июл 12, 00:07    [12897559]     Ответить | Цитировать Сообщить модератору
 Re: BCP: запрос с параметрами  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Процедуру выкиньте. Напишите VIEW где в нужном месте поставьте GetDate(), а далее Job по хрону в неделю будет вызывать BCP, который будет выгружать из данной VIEW.

Почему VIEW? Да потому что хватит уже бездумной императивщины.
22 июл 12, 00:12    [12897570]     Ответить | Цитировать Сообщить модератору
 Re: BCP: запрос с параметрами  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Если у вас там что-то в базе делается (изменяется) в этой процедуре. То просто допишите в Job тупой вызов процедуры.
Т.е. не забываем про разделение обязанностей.
22 июл 12, 00:17    [12897583]     Ответить | Цитировать Сообщить модератору
 Re: BCP: запрос с параметрами  [new]
aashuron
Member

Откуда:
Сообщений: 4
Mnior
Если у вас там что-то в базе делается (изменяется) в этой процедуре. То просто допишите в Job тупой вызов процедуры.
Т.е. не забываем про разделение обязанностей.


Спасибо.

Итак, если я правильно понял, то нужно:
1. Существующий select реализовать в виде view;
2. В where для view реализовать расчет даты как getDate() - 1 неделя;
3. Реализовать простой джоб, который будет вызывать bcp и выгружать созданный view;

Я все правильно понял?
22 июл 12, 11:09    [12898090]     Ответить | Цитировать Сообщить модератору
 Re: BCP: запрос с параметрами  [new]
invm
Member

Откуда: Москва
Сообщений: 9780
aashuron,

Если воспользуетесь советом Mnior'а, то потеряете возможность повторно выгружать данные за предыдущие недели.

Можно сделать так:
Запрос обернуть инлайновой функцией с одним параметром типа date или datetime.
В шаге джобе c bcp использовать токен агента:
bcp "select * from dbo.MyFunc('$(ESCAPE_NONE(DATE))')" queryout ...
22 июл 12, 12:36    [12898216]     Ответить | Цитировать Сообщить модератору
 Re: BCP: запрос с параметрами  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
invm
использовать токен агента:
$(ESCAPE_NONE(DATE))
Какие мы продвинутые :-P
1. Можно поставить NULL или Default, а там IsNull() заменять.
2. Может быть лучше количество недель назад (Default - 0)
3. А оно так сложно заменить даты во вью для таких сверх исключительно редких случаев?!

А вообще конечно спасиб, врядли воспользуюсь когда либо, но хоть буду знать о существовании.
Использование токенов в шагах задания

aashuron
В where для view реализовать расчет даты как getDate() - 1 неделя;
Более точнее - поставить расчёт дискретный, чтобы даты вычислялись одинаковые что для понедёрнега, вторнега, и сряды. Мало ли чё.
Т.е. не 7 дней назад, а с начала предыдущей недели по начало этой, типа того.
23 июл 12, 02:44    [12900184]     Ответить | Цитировать Сообщить модератору
 Re: BCP: запрос с параметрами  [new]
aashuron
Member

Откуда:
Сообщений: 4
Mnior
invm
использовать токен агента:
$(ESCAPE_NONE(DATE))
Какие мы продвинутые :-P
1. Можно поставить NULL или Default, а там IsNull() заменять.
2. Может быть лучше количество недель назад (Default - 0)
3. А оно так сложно заменить даты во вью для таких сверх исключительно редких случаев?!

А вообще конечно спасиб, врядли воспользуюсь когда либо, но хоть буду знать о существовании.
Использование токенов в шагах задания

aashuron
В where для view реализовать расчет даты как getDate() - 1 неделя;
Более точнее - поставить расчёт дискретный, чтобы даты вычислялись одинаковые что для понедёрнега, вторнега, и сряды. Мало ли чё.
Т.е. не 7 дней назад, а с начала предыдущей недели по начало этой, типа того.


Спасибо, так и сделаю. Думаю, Вы правы насчет исключительных случаев: в те редкие (надеюсь) случаи, когда придется запускать или перезапускать руками, можно с легкостью поменять дату. В остальном, думаю, все понятно, и я попробую метод, предложенный уважаемым Mnior.
23 июл 12, 08:20    [12900346]     Ответить | Цитировать Сообщить модератору
 Re: BCP: запрос с параметрами  [new]
aashuron
Member

Откуда:
Сообщений: 4
Скажите, пожалуйста, а есть ли возможность задать имя файла (DDMMYYYY) для экспортируемого файла?
Можно ли также в экспортируемом файле в качестве первой строки вывести имена полей view?

Спасибо
23 июл 12, 08:31    [12900359]     Ответить | Цитировать Сообщить модератору
 Re: BCP: запрос с параметрами  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3041
aashuron
Скажите, пожалуйста, а есть ли возможность задать имя файла (DDMMYYYY) для экспортируемого файла?
Можно ли также в экспортируемом файле в качестве первой строки вывести имена полей view?

Спасибо


1. можно вот пример получения имени файла в виде YYYYMMDD_HHMI
%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%_%TIME:~0,2%%TIME:~3,2%
и запускать обязательно через START
2. не нашёл параметра, но используя SqlCmd, такой параметр есть
23 июл 12, 08:45    [12900380]     Ответить | Цитировать Сообщить модератору
 Re: BCP: запрос с параметрами  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3041
HandKot
aashuron
Скажите, пожалуйста, а есть ли возможность задать имя файла (DDMMYYYY) для экспортируемого файла?
Можно ли также в экспортируемом файле в качестве первой строки вывести имена полей view?

Спасибо


1. можно вот пример получения имени файла в виде YYYYMMDD_HHMI
%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%_%TIME:~0,2%%TIME:~3,2%
и запускать обязательно через START
2. не нашёл параметра, но используя SqlCmd, такой параметр есть


лучше использовать всетаки токены. Используя cmd-переменные в именах файлов появлялись пробелы (пример когда часы до 10)
у себя переделал так
c:\$(ESCAPE_NONE(DATE))_$(ESCAPE_NONE(TIME)).txt

отсутствуют лидиружщие "0" (опять же, когда время до 10), но хоть нет пробела в имени файла
25 июл 12, 09:39    [12911896]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить