0

毎朝リロードされ、トランク化されるテーブルがあります。日付/時刻列も自動インクリメンタル列もありません。

毎朝追加された行を把握し、特定の値を持つ各行のテーブルに新しい列を追加するクエリが必要です (新しい場合は 1 つ、そうでない場合は別の列)。また、可能であれば、行が追加された日付を含む 2 番目の列を追加します。

私が考えているのは、毎日表をコピーして、次の日に新しい表と比較するということです。

もしそうなら、どうすればそれを行うことができますか?データがテーブルに書き込まれる方法を変更せずに、より良い方法はありますか?

4

1 に答える 1

0

はい、元のテーブルの制約を考えると、2 番目のテーブルを作成することは合理的な解決策のように思えます

では、1 日目にシャドー テーブルを作成してデータを入力します。

CREATE TABLE Shadow (/* Same columns as original, plus added date, magic value column */)
INSERT INTO Shadow (/* Same columns as original, plus added date, magic value column */)
SELECT /* Columns, plus todays date and the magic value column */ FROM Original

その後、次の日に:

ALTER TABLE Original ADD MagicColumn int null
GO
ALTER TABLE Original ADD AddedDate date null
GO
MERGE INTO Original o
USING Shadow s
     ON o.PK1 = s.PK1 and o.PK2 = s.PK2

WHEN MATCHED
   THEN UPDATE
      SET
         AddedDate = s.AddedDate,
         MagicColumn = 1 /* Value for updated */

WHEN NOT MATCHED BY SOURCE
   THEN UPDATE
      SET
         AddedDate = CURRENT_TIMESTAMP,
         MagicColumn = 0; /* Value for new */
GO
TRUNCATE TABLE Shadow
GO
INSERT INTO Shadow (/* Same columns as original, plus added date, magic value column */)
SELECT /* All columns */ FROM Original

これらのステートメントの一部は、別のバッチに入れる必要があります (たとえば、ステートメントは とは別のバッチに入れるALTER TABLE必要がありますMERGE)。そのため、SQL エージェント ジョブでこれを行う場合は、別のステップにする必要があります。

以下を含む列を何と呼ぶべきかわからないため、「魔法の値の列」を参照し続けます。

特定の値 (新しい場合は 1 つ、そうでない場合は別の値)

于 2012-09-19T08:57:13.393 に答える