2011-02-09 1 views
1

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

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

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

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

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

EDIT: рад быть скорректировано о SSIS будучи "излишним" ...

ответ

3

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

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

sqlcmd YourScript.sql 
sqlcmd -Q"select getdate()" -o datetime.txt 
+0

Блестящий, это именно то, что мне нужно. Благодаря! – sasfrog

2

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

+0

я могу видеть, что это было бы идеально, но для этого мне нужно, чтобы создать новую базу данных для хранения таблицы - оба баз данных в поддержке вопроса патентованной приложений, поэтому я не могу создать таблицу в любом из них. – sasfrog

+0

Как насчет другой схемы? Я предлагаю, что часто неправильная идея изменять поставленные объекты, но добавление нового объекта практически не влияет. И если в другой схеме нет риска «потерять» ее среди поставленных объектов. – Karl

2

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

 
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 
+0

См. Мой ответ на аналогичный ответ Карла. Я начинаю думать, что, возможно, стоит создать специальную базу данных для этой задачи, чтобы я мог делать то, что вы и Карл предложили. – sasfrog

 Смежные вопросы

  • Нет связанных вопросов^_^