SQL SERVER2000初心者です。


下記のようなテキストファイルのデータを、SQL Serverのテーブルにコピーしたいです。
そのテーブルは【商品コード】【登録日】の2フィールドで、
【商品コード】にテキストファイルのデータを、【登録日】
に登録した日付を入力したいのです。

<C:\DATA.TXT>(テキストファイル)
A111
A222
A333


<SHOHIN_TABLE>(商品テーブル)
SHOHIN_CODE(商品コード)
TOUROKUBI(登録日)

方法をご存知の方、教えていただけないでしょうか。
よろしくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/12/04 17:33:16
  • 終了:2006/12/05 18:25:48

ベストアンサー

id:kurukuru-neko No.3

kurukuru-neko回答回数1844ベストアンサー獲得回数1552006/12/04 19:47:24

ポイント30pt

一時テーブルを使うなら

フィールドが少ないデータ ファイルの使用

http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja...

面倒であれば

1フィールドのテーブルを作成してbulk copy

後alter table でカラムを追加すれば済みます。

id:db_Magician

たびたびありがとうございます。

今日はもう遅いので、明日試してみたいと思います。


#2番、3番の回答を組み合わせて無事解決できました。

ありがとうございました。

2006/12/05 17:23:39

その他の回答(3件)

id:daggersherkee No.1

daggersherkee回答回数61ベストアンサー獲得回数22006/12/04 18:00:36

ポイント10pt

Enterprise Managerを起動して

ツールから

データ変換サービスより「データのインポート」を

選択し、

データソースを「Text File」に設定して

ファイル名を指定し「次へ」

ファイルの読み込みについて指定した後

変換先をデフォルトのままサーバと

データベースを指定してインポートできます。

http://www.yahoo.co.jp

id:db_Magician

回答ありがとうございます。

確かにこの方法でインポートはできるのですが、

登録日を入力できないことと、この操作をジョブ化

したいので、できればSQL文など、他の方法を教えていただけると

嬉しいです。

最初から書いておくべきでしたね。

質問に不足があり、申し訳ありません。

2006/12/04 18:31:32
id:kurukuru-neko No.2

kurukuru-neko回答回数1844ベストアンサー獲得回数1552006/12/04 18:48:24

ポイント10pt

1.~4.を行うisqlとか作成してみては

1. CREATE TABLEで一時テーブルを作成

2. BULK INSERT 一時テーブルにインサート

3. UPDATEで 一時テーブルの日付を変更

4. INSERTで一時テーブルを保存したいテーブルに追加

BULK INSERT フォーマット ファイルの使用

http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja...

http://www.k3.dion.ne.jp/~reestr/sqldml_bulk.htm

嗜好は違いますがDTS(Data Transformation Service)

http://www.microsoft.com/japan/msdn/sqlserver/columns/dts/dts1.a...

id:db_Magician

回答ありがとうございます。

この方法は私も考えましたが、2フィールドあるテーブルに

1フィールド分のデータのみインサートする方法が

分かりませんでした。

bcpフォーマットファイルというもので細かく設定できるのですね…

これはどのようにして作成すればいいのでしょうか…??

もしよろしければ教えていただけないでしょうか。

2006/12/04 19:19:16
id:kurukuru-neko No.3

kurukuru-neko回答回数1844ベストアンサー獲得回数1552006/12/04 19:47:24ここでベストアンサー

ポイント30pt

一時テーブルを使うなら

フィールドが少ないデータ ファイルの使用

http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja...

面倒であれば

1フィールドのテーブルを作成してbulk copy

後alter table でカラムを追加すれば済みます。

id:db_Magician

たびたびありがとうございます。

今日はもう遅いので、明日試してみたいと思います。


#2番、3番の回答を組み合わせて無事解決できました。

ありがとうございました。

2006/12/05 17:23:39
id:bonlife No.4

回答回数421ベストアンサー獲得回数752006/12/05 10:23:43

ポイント45pt

スクリプトでテキストからSQLを生成し、それを読み込んで実行すれば良いと思います。

(Perlが全く分からない場合はちょっと大変かもしれませんが、LL言語は使いこなせると非常に便利なので、得意でない場合もこれを機に勉強してみても良いと思います。)

  • sql_generate.pl
#! /usr/bin/perl

use strict;
use warnings;

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
my $today = sprintf("%04d%02d%02d", $year + 1900, $mon + 1, $mday);

# TOUROKUBIがVARCHAR型の場合用の文字列生成
my $register_date = sprintf("%04d/%02d/%02d", $year + 1900, $mon + 1, $mday);

# 読み込むファイルの指定
my $infile  = "./data.txt";
my $outfile = "./insert_shohin_table_$today.sql";

open(IN, $infile)      or die "Can't open '$infile' : $!";
open(OUT, ">$outfile") or die "Can't open '$outfile' : $!";

# SQLの生成 ($outfileで指定したファイルに書き込み)

while (<IN>) {
    chomp;
    print OUT "INSERT INTO shohin_table VALUES ('$_',GETDATE());\n" if not /^\s*$/ ;
# TOUROKUBIがVARCHAR型のフィールドの場合、上記をコメントアウトし、下記を有効にする
#    print OUT "INSERT INTO shohin_table VALUES ('$_','$register_date');\n" if not /^\s*$/ ;
}

close(OUT);
close(IN);

上記のスクリプトを

perl sql_generate.pl

などとして実行するとSQL文を含んだテキストファイルが生成されます。

  • data.txt
A111
A222
A333

上記のような場合、テキストファイルを元にSQLを生成すると

INSERT INTO shohin_table VALUES ('A111',GETDATE());
INSERT INTO shohin_table VALUES ('A222',GETDATE());
INSERT INTO shohin_table VALUES ('A333',GETDATE());

このような内容の insert_shohin_table_20061205.sql というファイルが生成されます。

TOUROKUBIがdatetime型のフィールドであれば、GETDATE()でINSERT時の日時をTOUROKUBIに設定できます。

もしもTOUROKUBIがVARCHAR型、あるいはCHAR型の場合、どのような文字列としてセットしたいのかに合わせてスクリプト上で文字列を生成してしまっておけば良いと思います。

上述のスクリプトでは、YYYY/MM/DD 形式での文字列にも対応できるようにしておきました。

参考になれば幸いです。

[参考URL]

id:db_Magician

丁寧な回答、ありがとうございます。

インサート文を生成するのですね。

perlが分からないのでちょっと厳しいですが、

覚えれば確かに便利そうです。

ぜひ参考にさせていただきます。

2006/12/05 18:22:56

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません