Если бы Ваш Timer
только когда-либо будет иметь одну задачу выполниться тогда, я предложил бы разделить ее на подклассы:
import java.util.Timer;
import java.util.TimerTask;
public class ReschedulableTimer extends Timer
{
private Runnable task;
private TimerTask timerTask;
public void schedule(Runnable runnable, long delay)
{
task = runnable;
timerTask = new TimerTask()
{
@Override
public void run()
{
task.run();
}
};
this.schedule(timerTask, delay);
}
public void reschedule(long delay)
{
timerTask.cancel();
timerTask = new TimerTask()
{
@Override
public void run()
{
task.run();
}
};
this.schedule(timerTask, delay);
}
}
необходимо будет работать над кодом для добавления проверок на неправильное употребление, но это должно достигнуть того, что Вы хотите. Эти ScheduledThreadPoolExecutor
, кажется, не создал в поддержке перепланирования, существующие задачи также, но аналогичный подход должны работать там также.
Этот SQL сделает это ...
DECLARE @SQL AS VarChar(MAX)
SET @SQL = ''
SELECT @SQL = @SQL + 'SELECT * FROM ' + TABLE_SCHEMA + '.[' + TABLE_NAME + ']' + CHAR(13)
FROM INFORMATION_SCHEMA.TABLES
EXEC (@SQL)
Если вы собираетесь отправить в Excel, я бы посоветовал вам использовать мастер экспорта и просто выбрать все таблицы в нем. В обозревателе объектов наведите курсор на имя базы данных и щелкните правой кнопкой мыши. Выберите задачи - экспорт данных и следуйте указаниям мастера. Я не понимаю, почему кому-то нужна вся база данных в Excel, но это лучший способ. Если вам нужно сделать это более одного раза, вы можете сохранить экспорт в пакете SSIS.
Можно получить имя всех столбцов из sys.columns
Можно получить имя всей таблицы из sys.tables
Но получить все данные из всех таблиц невозможно. Если в запросе участвует более одной таблицы, необходимо JOIN. Если не указаны условия соединения, таблицы объединяются как полное декартово произведение, то есть каждая строка из каждой таблицы сопоставляется с каждой строкой из всех других таблиц. Такой запрос, который вы запрашиваете, будет производить для 10 таблиц с 10 записями в каждой не менее 10e10 записей, т.е. 100 миллиардов записей. Я уверен, что вы этого не хотите.
Возможно, если вы объясните, что вам , чего достичь, а не , как , мы сможем лучше помочь.
Выбрать * из каждой таблицы, одну за другой, вы можете использовать недокументированную, но хорошо известную sp_msforeachtable:
sp_msforeachtable 'select * from ?'