2010-01-12 4 views
2

У меня есть данные, поступающие из хранилища данных, которые помещаются в нашу базу данных SQL Server 2008 в таблицу: stg_table_outside_data. Наш источник ежедневно помещает данные в эту таблицу. Я хочу переместить данные от stg_table_outside_data до table_outside_data, где я храню данные за несколько дней.После запуска триггера - SQL Server 2008

Я создал хранимую процедуру, которая вставляет данные от stg_table_outside_Data в table_outside_data, а затем усекает stg_table_outside_Data. Внешний процесс обработки данных находится вне моего контроля, поэтому я должен сделать это все в SQL Server 2008. Я изначально планировал использовать простой оператор insert, но datastage выполняет фиксацию после каждых 100 000 строк. Триггер запускается после первого коммита и вызывает ошибку тупика для процесса обработки данных.

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

Я ценю ваше время и помощь.

ответ

2

Один из способов сделать это - воспользоваться новым оператором MERGE в SQL Server 2008 (см. MSDN docs и this blog post) и просто планировать это как задание SQL каждые 30 минут или около того.

Оператор MERGE позволяет легко определить операции (INSERT, UPDATE, DELETE или вообще ничего) в зависимости от того, соответствуют ли исходные данные (ваша промежуточная таблица) и целевые данные (ваша «настоящая» таблица) некоторые критерии, или нет.

Так что в вашем случае, это было бы что-то вроде:

MERGE table_outside_data AS target 
USING stg_table_outside_data AS source 
ON (target.ProductID = source.ProductID) -- whatever join makes sense for you 

WHEN NOT MATCHED THEN 
    INSERT VALUES(.......) 

WHEN MATCHED THEN 
    -- do nothing 
1

Вы не должны использовать триггер для этого, вы должны использовать запланированное задание.

+0

Хотел бы я. Наша компания не позволит нам создавать запланированные рабочие места. Мы должны привлечь DBA, и план проекта выведет нас на 3 месяца. У меня есть в этом списке ожидания, но я надеялся найти временное решение. – Azzna

+1

Это займет 3 месяца, чтобы получить dba, чтобы запланировать работу? Пять минут или меньше? В самом деле? Но они позволят вам возиться с триггерами? Как странно. – HLGEM

+0

Нам не разрешено назначать задания, потому что они не могут помешать нам планировать работу, чтобы захватить данные из других баз данных внутри компании. Однако мы можем настроить триггеры, потому что они построены и содержатся в нашей собственной базе данных. – Azzna

0

возможно построение процедуры, которая перемещает все данные из stg_table_outside_Data в table_outside_data один раз в день, или с помощью планировщика заданий.

0

Выполняйте подсчет строк на триггере, если счет меньше 100 000, ничего не делает. В противном случае запустите процесс.

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