0

いくつかの提案が必要な状況があります。私はそれを調べて自分で理解したいので、コードはありません。これは単なる学術的な質問です。

私は毎日、テーブルにロードする必要があるフラット ファイルを取得します。ファイルのスニペットは次のとおりです。

Date-YYYMMDD  TIME
20091124|     01:19:00|...
20091124|     01:19:15|...

2 つのフィールドは日付と時刻です。このデータをデータベースにロードすると、結果は次のようになります。

Date-YYYMMDD  TIME
20091124      1899-12-30 01:19:00.000
20091124      1899-12-30 01:19:15.000

データと結果をマージするビューがあります:

datetime                   yearmonthday
2009-11-24 01:19:00.000    2009-11-24
2009-11-24 01:19:15.000    2009-11-24

このデータを必要としている人々が、日付であるべきなのにそうではない日付やテキスト フィールドをいじる必要がないように、私はこの努力をしています。

問題は、ビューでこれを行うのが好きではないことです。元のテーブルに正しく保存するだけです。挿入されたすべての行について、その挿入を傍受し、マージしてから、正しい形式でテーブルに挿入すると考えていました。完了したら、ビューを削除できます。これに最善の方法はありますか?優れた開発者/管理者のように。介入を最小限にしたい。この種の作業を行うためのコンピュータがあります。私はソース ファイルを管理しておらず、それを変更することもできません。私はオンインサートトリガーを考えていました。より良い方法はありますか?私は何ヶ月にもわたって TSQL で多くのことを行ってきましたが、優れた TSQL と物事を行うための最も効率的な方法を理解する上で、自分自身を初心者だと考えています。

4

1 に答える 1

2

ステージングテーブルにロードすると思います。

CREATE TABLE dbo.StagingTable
(
  Col1 DATETIME,
  Col2 DATETIME
);

このテーブルにデータをロードします。BULK INSERTファイルが質問のファイルのように単純な場合は、手作業のプロセスの多くを使用して切り取ることができるはずです。次に、実際のテーブルにDATETIME列を作成します。

INSERT dbo.RealTable(DateTimeColumn)
  SELECT DATEADD(SECOND, DATEDIFF(SECOND, 0, Col2), Col1)
  FROM dbo.StagingTable;

-- if successful:
TRUNCATE TABLE dbo.StagingTable;

さらに簡単な方法は、ファイルを開いてとにかく変更する場合、これを変更することです。

Date-YYYMMDD  TIME
20091124|     01:19:00|...
20091124|     01:19:15|...

これに:

Date-YYYMMDD     |...
20091124 01:19:00|...
20091124 01:19:15|...
于 2013-07-29T17:41:55.100 に答える