2016-10-13 2 views
0

Я новичок в SSC. Мой сценарий заключается в том, что я создал таблицы A, B и C, которые связаны друг с другом.Как получить результаты из sql-заданий без запуска каждый раз

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

Из-за этого я создал таблицу «R» и процедуру обновления ее содержимого. В этой процедуре я соединяю все таблицы (A, B и C) и сохраняю результат в таблице R.

Чтобы получить результаты в этой таблице, я создаю SqlJob, который запускается один раз в день. Однако есть проблема. Иногда мне нужны результаты из таблиц A, B и C, где недавно были вставлены записи (до того, как R был обновлен).

Есть ли какое-либо решение для получения результата из таблицы R каждый раз без запуска SqlJob для его обновления?

Дополнительная информация

Мое искомое решение, что в любое время мне нужно данные, таблицы R опрашивается, не соединяемые таблицы A, B и C. Ваше решение должно учитывать это.

спасибо.

+0

Просто интересно, но что такое "SSC"? – STLDeveloper

+0

На основе другой обратной связи этот вопрос может быть лучше подходит для другого сайта StackExchange [Programming Puzzles and Code Golf] (http://codegolf.stackexchange.com). – STLDeveloper

ответ

0

добавить столбец timex (timestamp) в таблицу R. , поэтому в любое время вы можете получить свой последний набор результатов.

+0

да его уже там. – RaghuValipe

+0

, если какое-либо значение столбца обновляется в любой из таблиц (a, b, c), мне нужно снова запустить sqljob, чтобы получить результат из таблицы-R. – RaghuValipe

+0

напишите три триггера для каждой таблицы, чтобы начать работу. –

1

Вместо того чтобы запускать процедуру для постоянного обновления таблицы «R», создайте представление базы данных. Это представление объединяло бы A, B и C вместе.

Затем, в любое время, когда вам нужно запросить A, B и C, вместо того чтобы рисковать получить устаревшие данные, запросив таблицу R, вы запросите представление.

Я не знаю схему базы данных, так что я не знаю, какие поля для объединения таблиц A, B и C, но это может выглядеть примерно так:

CREATE VIEW V1 
AS 
SELECT * FROM A INNER JOIN B ON A.X = B.X INNER JOIN C ON B.Y = C.Y; 

для запроса вид, вы будете использовать SELECT заявление так же, как с таблицей:

SELECT * FROM V1; 
+0

благодарим вас за ответ. , но я хочу использовать процедуру в своем сценарии. – RaghuValipe

0

на основе обратной связи с OP, что таблица «R» должен всегда быть запрошены в таблице (? есть это домашнее задание), то я предположим, что единственным решением было бы разместить триггер обновления на каждой из таблиц «A», «B» и «C», так что, когда какая-либо из этих таблиц обновляется, их обновленное содержимое автоматически помещается в таблицу «R».

Хотя это неэффективно, по крайней мере, это лучше, чем запуск хранимой процедуры в течение некоторого времени, например каждые 5 минут.

CREATE PROCEDURE [usp_SyncR] 
AS 
BEGIN 
    SET NOCOUNT ON; 
    UPDATE [R] 
     SELECT * 
       GETUTCDATE() as [UpdatedOn] 
      FROM A INNER JOIN B ON A.X = B.X INNER JOIN C ON B.Y = C.Y 
END 

CREATE TRIGGER [trg_A_Sync_R] 
    ON [A] 
AFTER Update 
AS 
BEGIN 
    EXEC [usp_SyncR]; 
END 

CREATE TRIGGER [trg_B_Sync_R] 
    ON [B] 
AFTER Update 
AS 
BEGIN 
    EXEC [usp_SyncR]; 
END 

CREATE TRIGGER [trg_C_Sync_R] 
    ON [C] 
AFTER Update 
AS 
BEGIN 
    EXEC [usp_SyncR]; 
END 
Смежные вопросы