- PR -

SQLServer7、Transact-SQLでテキストファイルの読書&移動方法

投稿者投稿内容
ろーちゃん
ベテラン
会議室デビュー日: 2005/05/26
投稿数: 79
投稿日時: 2005-11-10 10:00
Transact-SQLで、テキストファイルの読書&フォルダ移動をしたいのですが。
ActiveXDLLとの連携でもできそうですが、Transact-SQLのみで
できないでしょうか?
らい
大ベテラン
会議室デビュー日: 2005/08/02
投稿数: 159
お住まい・勤務地: 東京都と千葉県のさかいめ
投稿日時: 2005-11-10 10:43
らいと申します。

引用:

ろーちゃんさんの書き込み (2005-11-10 10:00) より:
Transact-SQLで、テキストファイルの読書&フォルダ移動をしたいのですが。
ActiveXDLLとの連携でもできそうですが、Transact-SQLのみで
できないでしょうか?


書かれていることの実装として考えられるのは、
【テキストの読み書き】
 ・DTSの追加
  ⇒DBへの読み込み/書き込み用 計2本
 ・DTS実行用ストアド
  ⇒master..xp_cmdshell 'dtsrun 〜'
【フォルダ移動】
 ・フォルダコピー(移動?)用ストアド
  ⇒master..xp_cmdshell 'copy(move) 〜'

くらいですかね。
テキストファイル読み込み用のテーブルを作成して処理させる方法ですが。

[修正]
DTS実行用の命令は、bcpじゃなくてdtsrunだよ...。orz
バックアップのソースを書きながらだったから、失敗しちまったい。
[/修正]
_________________
一寸先は闇
安定してるシステムって言ったじゃん(泣)

[ メッセージ編集済み 編集者: らい 編集日時 2005-11-10 10:47 ]
ろーちゃん
ベテラン
会議室デビュー日: 2005/05/26
投稿数: 79
投稿日時: 2005-11-10 13:32
返信ありがとうございます。
⇒DBへの読み込み
ですが、ファイル名が分からないので、単純に読込みできないように思います。
(ファイルが1フォルダに複数ある。ファイル名は不明)
この場合、
アクティブ スクリプト タスクというのを使ってファイル名を取得しないと
いけないんでしょうか?
アクティブ スクリプト タスクで「DBへの読み込み」は可能でしょうか?
らい
大ベテラン
会議室デビュー日: 2005/08/02
投稿数: 159
お住まい・勤務地: 東京都と千葉県のさかいめ
投稿日時: 2005-11-10 15:05
らいです。

引用:

ろーちゃんさんの書き込み (2005-11-10 13:32) より:
⇒DBへの読み込み
ですが、ファイル名が分からないので、単純に読込みできないように思います。
(ファイルが1フォルダに複数ある。ファイル名は不明)
この場合、


ち、ちょっとまった。(汗
とりあえず、前提条件があるなら全部書いてみてもらえます?

あと、そのファイル名に規則性ってあります?
たとえば、hoge200511101456.txtみたいな。
(上の例は、規則文字列+日付+時刻の例です。)
規則性があって、なおかつ終了時にどっかに移動するのであれば、
そのファイルを一意性のファイル名でコピーして、それをDTSで読み込むようにすれば
いけれるんじゃないかと思ったので。

たとえば、
hoge200511101456.txt

hogehoge.txtとしてコピー
(このときに一緒にバックアップしてもいいかな?)

DTSで取り込み
ってな感じで。

引用:

アクティブ スクリプト タスクというのを使ってファイル名を取得しないと
いけないんでしょうか?
アクティブ スクリプト タスクで「DBへの読み込み」は可能でしょうか?


えと、アクティブスクリプトタスクって何?
何かわからないので、DBへの読み込みができるかわかりません。

_________________
一寸先は闇
安定してるシステムって言ったじゃん(泣)
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2005-11-10 15:26
すみません。
そもそものお話になってしまいますが、
SQLでファイルの読み書きをしたいとか
ファイルの移動をしたい理由って何でしょうか?
ろーちゃん
ベテラン
会議室デビュー日: 2005/05/26
投稿数: 79
投稿日時: 2005-11-10 16:08
返信ありがとうございます。

>そのファイルを一意性のファイル名でコピーして、
コピーはどうやればいいですか?

一意性は無いと考えた方がいいです。


知っている限りの仕様
@SQLサーバーのPCのあるフォルダにiniファイルに近い形式のデータが入ってくる
 ファイル名は不明。一定間隔でフォルダの中身を見に行く予定
Aそのデータを解析、「A=100Z」とかなら、これこれは100Zですね、と判断
B解析したデータを、マスタで引き当てして適宜コンバート
CコンバートしたデータをDBに上げる
D読み込んだiniファイルもどきは..\oldに移動し、2回読み込まないようにする
E@へもどる

こんな感じですが・・・

>えと、アクティブスクリプトタスクって何?
VBAみたいなやつです。ちなみにぼくは今日、初めて見てます。
VBAだから
Set fso = CreateObject("Scripting.FileSystemObject")
で、ファイルの取得ぐらいはできるんじゃないかと思ったんですが、
抜き取ったテキストをどうやってストアドに上げるのかどうか・・・

VB6などは使わない予定です。
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2005-11-10 16:18
引用:

ろーちゃんさんの書き込み (2005-11-10 16:08) より:

知っている限りの仕様
@SQLサーバーのPCのあるフォルダにiniファイルに近い形式のデータが入ってくる
 ファイル名は不明。一定間隔でフォルダの中身を見に行く予定
Aそのデータを解析、「A=100Z」とかなら、これこれは100Zですね、と判断
B解析したデータを、マスタで引き当てして適宜コンバート
CコンバートしたデータをDBに上げる
D読み込んだiniファイルもどきは..oldに移動し、2回読み込まないようにする
E@へもどる


3,4はSQL発行などDBへの操作が必要そうに思えますが、
そのほかの部分はWSHなどで対応するっていうのは駄目でしょうか?

たとえば
WSHからosqlなどでSQL発行をし、データの読み書きをして
ファイルの読み書きはWSHなどで・・・と思ったんですが。

Scr.002 逆引きWSH(VBScript)サンプル集
osqlユーティリティ

[ メッセージ編集済み 編集者: 夏椰【SUICA】 編集日時 2005-11-10 16:18 ]
らい
大ベテラン
会議室デビュー日: 2005/08/02
投稿数: 159
お住まい・勤務地: 東京都と千葉県のさかいめ
投稿日時: 2005-11-10 17:34
らいです。

引用:

ろーちゃんさんの書き込み (2005-11-10 16:08) より:
知っている限りの仕様
@SQLサーバーのPCのあるフォルダにiniファイルに近い形式のデータが入ってくる
 ファイル名は不明。一定間隔でフォルダの中身を見に行く予定
Aそのデータを解析、「A=100Z」とかなら、これこれは100Zですね、と判断
B解析したデータを、マスタで引き当てして適宜コンバート
CコンバートしたデータをDBに上げる
D読み込んだiniファイルもどきは..oldに移動し、2回読み込まないようにする
E@へもどる

こんな感じですが・・・


うっわ、めっちゃステキな仕様ですねぇ。
つーことで2点ほど確認。

1.ファイルが作成される(受信する?)のも一定間隔?
 また、その検知はどうやるの?
 >随時監視じゃないよね?ってこと。
2.「あるフォルダ」にはまだ読み込まれていないファイルのみ存在する?

あと、疑問に思ったこと。

1.ファイル名は「絶対に」重複しないのか。
 >いや、重複したらアウトだな、と。
2.随時監視ってことだと、CPUに負担をかなり強いますが、その辺の確認はOK?
3.リカバリについては、どのように考えているか。
 >どー考えても、リカバリしにくそうなシステムになるなぁ、と。

引用:

>えと、アクティブスクリプトタスクって何?
VBAみたいなやつです。ちなみにぼくは今日、初めて見てます。
VBAだから
Set fso = CreateObject("Scripting.FileSystemObject")
で、ファイルの取得ぐらいはできるんじゃないかと思ったんですが、
抜き取ったテキストをどうやってストアドに上げるのかどうか・・・

VB6などは使わない予定です。


VBAみたいなものってことは、VBAではないってことでOK?
ちとキツいなぁ。
仕様もわからないので、こちらでの助言はパス。

で、結構できるかもよ?T-SQLのみで。
ちとめんどくさいけどね。
ヒントとしては、
「ファイルのコピー」「タスクマネージャ」「master..xp_cmdshell」「Dirコマンド」「Deleteコマンド」
こんなところでしょうか。

方法は、自宅に帰った後に書き込みます。
さすがに、仕事場でこれ以上は書き込めない…。(笑)

_________________
一寸先は闇
安定してるシステムって言ったじゃん(泣)

スキルアップ/キャリアアップ(JOB@IT)