Запишите в текстовый файл, используя T-SQL - PullRequest
2 голосов
/ 09 февраля 2011

Я создаю основную задачу передачи данных с использованием TSQL, где я извлекаю определенные записи из одной базы данных, которые являются более новыми, чем заданное значение даты / времени, и загружаю их в другую базу данных.Это будет происходить периодически в течение дня.

Это такая маленькая задача, что SSIS кажется излишним - я хочу просто использовать запланированную задачу, которая запускает файл .sql.

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

Я могу без проблем прочитать файл, используя T-SQL, новыписывание назад застряло у меня.Я видел множество примеров, в которых используется динамически создаваемая команда bcp, которая затем выполняется с использованием xp_cmdshell.Проблема в том, что безопасность на сервере, который я развертываю, исключает использование xp_cmdshell.

Итак, мой вопрос, есть ли другие способы просто записать значение datetime в файл, используя TSQL, или я должен это сделать?Думаете о другом подходе?

РЕДАКТИРОВАТЬ: счастливы быть исправлены о "избыточном" SSIS ...

Ответы [ 3 ]

4 голосов
/ 09 февраля 2011

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

Я уверен, что это можно сделать лучше, но просто чтобы показать вам идею,Вот содержимое командного файла, который вы можете использовать.Прочитайте содержимое datetime.txt из YourScript.sql

sqlcmd YourScript.sql
sqlcmd -Q"select getdate()" -o datetime.txt
3 голосов
/ 09 февраля 2011

Вы уверены, что вам нужен файл? Если вы можете использовать таблицу для хранения даты и у вас есть доступ к обеим базам данных:

set xact_abort on

begin transaction

insert database2.dbo.myTable (...)
    select ...
    from database1.dbo.myTable
    where database1.dbo.myTable.someDate > (select lastRunTime from database1.dbo.myTransferDate)

update database1.dbo.myTransferDate set lastRunTime = getdate()

commit transaction
3 голосов
/ 09 февраля 2011

Зачем использовать текстовый файл. Если вы используете TSQL и читаете данные из таблицы, сохраняйте их согласованными и пишите в одну и ту же базу данных. Например. создать таблицу для хранения времени последнего запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...