2016-10-13 11 views
0

SSCを初めて使用しています。私のシナリオは、テーブルA、テーブルB、テーブルCを作成してお互いに関連付けることです。毎回実行せずにsql-jobsから結果を取得する方法

これらの3つのテーブルのデータが必要な場合は、いつでも結果を得るためにこれらのテーブルに参加する必要があります。これを行うには少し時間がかかります。

このため、私はテーブル 'R'とその内容を更新する手順を作成しました。この手順では、すべてのテーブル(A、B、C)を結合し、結果をテーブルRに格納しています。

このテーブルに結果を得るには、毎日1回実行するSqlJobを作成します。しかし、問題があります。ときには、レコードが最近挿入された(Rが更新される前の)A、B、Cテーブルの結果が必要な場合があります。

SqlJobを実行しないで毎回Rテーブルから結果を取得する方法はありますか?

追加情報

私の希望ソリューションは、あなたのソリューションは、これを考慮に入れる必要がありますない結合されたテーブルA、B、およびCで、私はデータを必要とする任意の時間は、テーブルRが照会されていることです。

ありがとうございます。

+0

「SSC」とは何ですか? – STLDeveloper

+0

他のフィードバックに基づいて、この質問はStackExchangeの他のサイト[プログラミングパズルとコードゴルフ](http://codegolf.stackexchange.com)に適しています。 – STLDeveloper

答えて

0

Rテーブルにtimex(タイムスタンプ)列を追加します。 いつでも最新の結果セットを取得できます。

+0

はいそれはすでにそこにあります。 – RaghuValipe

+0

テーブル(a、b、c)のいずれかでカラム値が更新された場合は、sqljobを再度実行してテーブル-Rから結果を取得する必要があります。 – RaghuValipe

+0

それぞれのテーブルに3つのトリガを書いて仕事を開始してください –

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ステートメントを使用します。テーブル「R」は、常にテーブルを照会しなければならないOPからのフィードバックに基づいて

SELECT * FROM V1; 
+0

あなたの返事をありがとう。 私は私のシナリオで手順を使用したい。 – RaghuValipe

0

は(この宿題ですか?)、私は唯一の解決策は、更新トリガーはそれぞれのテーブル '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 
関連する問題